我正在使用3个字段(“name”,“addr”和“fullname”)搜索索引,并使用DisjunctionMaxQuery
按3个字段的最高分数对结果进行排名。当命中得分相同时,lucene按文档ID排名(低doc Id将是第一个)。
但在这种情况下,我不想按文档ID排名。我想按字段排名。如果点击得分相同,我预计得分(最高得分)来自字段“名称”的命中将在得分来自另一个字段的命中之前。
我认为客户收藏家& HitQueue是个好主意并且重写方法PriorityQueue.lessThan可以改变优先级队列中的排名。不幸的是,ScoreDoc中的信息太少了,而且很难获得每次点击的最高得分来源。
其他人知道如何解决它?
答案 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);