我的lucene索引包含字段为“itemName”的文档。此字段提升与0和1之间 增强因素,当我创建一个BooleanQuery我想,结果被匹配的条款和boostfactor的数量排名,所以计算公式如下:如何实现自定义搜索结果排名?
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"
and the Boo leanQuery将如下所示: count_of_matching_clauses = 2和 count_of_total_clauses = 2
文件2将是:
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);
比文档1将与一个分数的(2/2 0)/ 2 = 0.5,因为要检索得分为(1/2 + 0)/ 2检索= 0.25,因为: count_of_matching_clauses = 1和 count_of_total_clauses = 2
比文件3将与一个分数的(2/2 0)/ 2被检索= 0.5因为: count_of_match ing_clauses = 2和 count_of_total_clauses = 2
如何在lucene中实现这种排名机制?我如何告诉lucene使用我的自定义排名类来对结果进行排名?
不,这不是默认打分。它与coord()因子有关,但tf()和idf()不仅可以改变分数,还可以改变排序。剩下的答案很好 - 特别是explain()部分。 – 2009-07-20 08:28:53