在Lucene中使用析取MaxQuery时,如何按同一分数中的特定字段排序?

在Lucene中使用析取MaxQuery时,如何按同一分数中的特定字段排序?,lucene,Lucene,我正在搜索一个包含3个字段的索引:name、addr和fullname,并使用析取MaxQuery按3个字段的最大分数对结果进行排序。当命中率相同时,lucene会按文档Id对其进行排序,文档Id将排在第一位 但我不想在这种情况下按文档Id排序。我想按领域排名。如果命中率相同,我希望得分最大的命中率来自于字段名的命中率将在得分来自另一个字段的命中率之前 我认为客户收集器和HitQueue是个好主意,重写方法PriorityQueue.lessThan可以更改优先级队列中的排名。不幸的是,Scor

我正在搜索一个包含3个字段的索引:name、addr和fullname,并使用析取MaxQuery按3个字段的最大分数对结果进行排序。当命中率相同时,lucene会按文档Id对其进行排序,文档Id将排在第一位

但我不想在这种情况下按文档Id排序。我想按领域排名。如果命中率相同,我希望得分最大的命中率来自于字段名的命中率将在得分来自另一个字段的命中率之前

我认为客户收集器和HitQueue是个好主意,重写方法PriorityQueue.lessThan可以更改优先级队列中的排名。不幸的是,ScoreDoc中的信息太少,很难获得每次命中的最大得分来源


其他人知道如何解决这一问题吗?

最简单的方法是简单地增加你想在平局中排名第一的领域,比其他领域稍微多一些:

查询查询=新建析取MaxQuery0; Query subQueryOne=新术语querynew Termone,searchterm 子问题1.2; Query subQueryTwo=newtermquerynewtermtwo,searchterm 子问题1.1; Query subquerytree=新术语querynew term三,searchterm 子问题1.0; query.addsubQueryOne; query.addsubQueryTwo; query.addSubQueryTree;
谢谢你的回复。setBoost通常是一个好方法。这将解决问题。但这也会带来一个新的问题,这将改变这些领域的得分。我不确定这是否会影响我们的搜索体验。当然可以。你只需让助推差异足够小。我希望这些字段在得分时具有相同的权重助推。我认为评分的唯一因素是查询和文档的文本相关性。我一直在尝试重写析取MaxScorer、编写自定义收集器和重写HitQueue.lessThan。我想附上带有一些字段信息或标签的ScoreDoc。但我发现这很困难,而且无法从得分手那个里获得球场信息。最后,如果我不能用我的方法解决这个问题,我会采用你的想法,而不是我的想法。谢谢你的帮助;