我的 lucene 索引包含带有“itemName”字段的文档。该字段使用 0 到 1 之间的提升因子进行提升。当我创建 BooleanQuery 时,我希望结果按匹配子句的数量和提升因子进行排名,因此公式如下所示:
score = (count_of_matching_clauses / count_of_total_clauses + boost_factor) / 2
分数总是介于 0 和 1 之间的浮点数。如果所有子句都匹配并且提升因子为 1,则为 1。
例如,如果三个没有提升因子的文档的“itemName”字段值为:
document1: "java is an island"
document2: "the secret of monkey island"
document3: "java island adventures"
和 BooleanQuery 看起来像:
TermQuery query1 = new TermQuery(new Term("name","java"));
TermQuery query2 = new TermQuery(new Term("name","island"));
BooleanQuery query = new BooleanQuery();
query.add(query1, BooleanClause.Occur.SHOULD);
query.add(query2, BooleanClause.Occur.SHOULD);
比 document1 检索到的分数为 (2/2 +0)/2 = 0.5,因为:count_of_matching_clauses = 2 和 count_of_total_clauses = 2
document2 将以 (1/2+0)/2 = 0.25 的分数被检索,因为:count_of_matching_clauses = 1 和 count_of_total_clauses = 2
比 document3 检索到的分数为 (2/2 +0)/2 = 0.5,因为:count_of_matching_clauses = 2 和 count_of_total_clauses = 2
如何在 lucene 中实现这种排序机制?我如何告诉 lucene 使用我的自定义排名类对结果进行排名?