提问者:小点点

在Lucene中使用析取最大查询时,如何按相同分数中的特定字段进行排序?


我正在搜索一个包含3个字段(“name”、“addr”和“fullname”)的索引,并使用<code>DisjunctionMaxQuery</code>按3个字段的最大得分对结果进行排序。当命中的分数相同时,lucene会根据文档Id对其进行排名(低文档Id将是第一位)。

但在这种情况下,我不想按医生Id排序。我想按领域排名。如果命中数相同,我预计得分(最大得分)来自字段“name”的命中数将在得分来自另一字段的命中数之前。

我认为客户收藏家

别人知道怎么解决吗


共1个答案

匿名用户

最简单的方法是简单地提高你想要在平局中排名第一的场,比其他场稍多一点:

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);