是否可以创建一个所有结果得分相同的searchQuery? 例: 我有一些我想要搜索的文档类型,我希望文档类型的匹配对分数没有任何影响。
(nodeTypeAlias:newsItem nodeTypeAlias:activity) 此查询为我提供了所有具有newsItem或activity为nodeTypeAlias的项目,但问题是活动项目的得分为2,7581,newsItem项目的得分为0,1061。这使得活动项目成为一个开端,而这是不需要的。
Ived尝试使用lucene.net来提升0,但是当传递给QueryParser时,它会将其转换为^ .0,并且lucene会在此类查询中断。
所以问题是:如何让字段搜索不影响分数,但是其他字段应该是(这些字段我实际上是用searchQuery搜索的)。
答案 0 :(得分:0)
将查询或子查询包装在ConstantScoreQuery
中,如:
Query constantQuery = new ConstantScoreQuery(nodeTypeAliasBQ);
booleanQuery.add(new BooleanClause(constantQuery, BooleanClause.Occur.MUST));
booleanQuery.add(new BooleanClause(someOtherQuery, BooleanClause.Occur.SHOULD));
在3.1之前,ConstantScoreQuery
只能与Filter
一起使用,而不能与Query
一起使用。你可以通过几种方式做到这一点。
将查询换入QueryWrapperFilter
:
Query constantQuery = new ConstantScoreQuery(new QueryWrapperFilter(nodeTypeBQ))
有趣的事实:仍有代码支持/优化此模式,在源代码中注明:
修复Lucene 2.x / early-3.x中过时的使用模式:因为ConstantScoreQuery只接受过滤器,所以QueryWrapperFilter用于包装查询。
使用TermsFilter
:
Filter nodeTypeFilter = new TermsFilter();
nodeTypeFilter.addTerm(new Term("nodeTypeAlias","newsItem"));
nodeTypeFilter.addTerm(new Term("nodeTypeAlias","activity"));
Query constantQuery = new ConstantScoreQuery(nodeTypeFilter)