在Lucene中使用DisjunctionMaxQuery时,如何在同一分数中按特定字段排名?

时间:2014-09-23 05:37:59

标签: lucene

我正在使用3个字段(“name”,“addr”和“fullname”)搜索索引,并使用DisjunctionMaxQuery按3个字段的最高分数对结果进行排名。当命中得分相同时,lucene按文档ID排名(低doc Id将是第一个)。

但在这种情况下,我不想按文档ID排名。我想按字段排名。如果点击得分相同,我预计得分(最高得分)来自字段“名称”的命中将在得分来自另一个字段的命中之前。

我认为客户收藏家& HitQueue是个好主意并且重写方法PriorityQueue.lessThan可以改变优先级队列中的排名。不幸的是,ScoreDoc中的信息太少了,而且很难获得每次点击的最高得分来源。

其他人知道如何解决它?

1 个答案:

答案 0 :(得分:0)

最简单的方法是简单地将你想要领先的领域提升到另一个领域:

Query query = new DisjunctionMaxQuery(0);

Query subQueryOne = new TermQuery(new Term("one", searchterm))
subQueryOne.setBoost(1.2);

Query subQueryTwo = new TermQuery(new Term("two", searchterm))
subQueryOne.setBoost(1.1);

Query subQueryThree = new TermQuery(new Term("three", searchterm))
subQueryOne.setBoost(1.0);

query.add(subQueryOne);
query.add(subQueryTwo);
query.add(SubQueryThree);