Java 基于索引字段的Boost算法

Java 基于索引字段的Boost算法,java,lucene,Java,Lucene,我有一些在索引中排序的字段(例如lexographicalStrings)。我想对更高的值给予更高的提升/评分 在Lucene 4中执行此操作的首选方法是什么?(通过点击IndexCache获得准确值是次优的) (对于早期版本的Lucene,Google点击率很高,但随着索引系统的极大改进,API发生了实质性的变化。)您可以通过将a传递到调用中,按字典顺序对字段值进行排序 这将首先根据给定字段的词典顺序进行排序,然后根据相关性得分进行排序。在构建sort时,您可以添加任意多的排序字段。我想仅仅根

我有一些在索引中排序的字段(例如lexographical
String
s)。我想对更高的值给予更高的提升/评分

在Lucene 4中执行此操作的首选方法是什么?(通过点击IndexCache获得准确值是次优的)


(对于早期版本的Lucene,Google点击率很高,但随着索引系统的极大改进,API发生了实质性的变化。)

您可以通过将a传递到调用中,按字典顺序对字段值进行排序


这将首先根据给定字段的词典顺序进行排序,然后根据相关性得分进行排序。在构建
sort

时,您可以添加任意多的排序字段。我想仅仅根据字段的值进行排序是不够的?此外,使用字段级(即索引时间)提升是否可以接受?我目前正在使用索引时间提升(但是,由于各种原因,这只适用于我们定期重新编制索引…例如,提升“最近”文档)。我不知道你所说的“按字段值排序”是什么意思。如果有一种方法可以使用字段的自然索引顺序,那将是完美的:避免实际查看文档是至关重要的(就像任何有效的Lucene查询一样)。我注意到,在执行索引提升时,插入速度会显著降低。在Lucene 4中,索引时间提升意味着遍历所有可索引字段并手动提升它们。嗯,这很有趣,但限制太多了。我当然不希望这一个领域主宰结果的顺序。是否可以构造一个
排序
,当多个点击具有相同分数时,可以使用所选字段的(反向)自然顺序来选择获胜者?是的。传递给
Sort
的参数的顺序决定了它们的优先级<代码>新排序(SortField.FIELD\u分数,primarySort)会先按相关性排序,然后按字段值排序(如果分数相等)。这并不是我想要的答案,但这对我来说已经足够好了,可以这样标记:也许它会帮助其他人(我真的在寻找一种从排序中获得真正分数提升的方法,而不是在考虑评分之前/之后。)
SortField primarySort = new SortField("field", SortField.Type.STRING);
Sort sort = new Sort(primarySort, SortField.FIELD_SCORE);
searcher.search(query, hits, sort);