0
我在用3个字段(“名称”,“地址”和“全名”)搜索索引,并使用DisjunctionMaxQuery
以3个字段的最高分对结果进行排名。当点击数相同时,lucene按doc ID排列它们(低doc ID将是第一个)。如何在Lucene中使用DisjunctionMaxQuery时按相同分数的特定字段进行排名?
但我不想按照doc ID排名。我想按字段排名。如果命中的分数相同,我预计其分数(最高分)来自“名称”字段的命中将在其分数来自其他字段的命中之前。
我觉得客户收集器& HitQueue是个好主意,重写PriorityQueue.lessThan方法可以改变优先级队列中的排名。不幸的是,ScoreDoc中的信息太少,很难为每次击中获得最高分数的来源。
其他人知道如何解决它?
感谢您的答复。 setBoost通常是一个好方法。它会解决问题。但它也会带来一个新问题,将会改变这些领域的得分。我无法确定它会影响我们的搜索体验。 – 2014-09-23 16:21:18
当然可以。您只需将增加的差异足够小。 – femtoRgon 2014-09-23 16:23:53
我希望这些领域在得分时具有相同的权重(助推)。我认为评分的唯一因素是查询和文档的文本相关性。 – 2014-09-23 16:24:25