Lucene如何计算多场得分?

时间:2009-04-24 12:57:10

标签: lucene information-retrieval

这是Lucene得分方程式:

得分(q,d)=坐标(q,d)·queryNorm(q)·Σ(tf(t in d)·idf(t)2·t.getBoost()·norm(t,d))

多场得分怎么样?

分数是直接求和还是平均或......?

3 个答案:

答案 0 :(得分:3)

您可以在Similarity课程中阅读评分的详细信息。在这个等式中,当参数实际上是指Field时参考Document。因此,术语频率是文档中给定字段中术语的频率。这会自动处理多个字段的查询。

KenE上面的回答是不正确的。 (等式中没有MAX运算符。)字段上每个查询的分数加起来为最终分数。对于查询(名称:账单或性别:男性),结果是(名称:账单)和(性别:男性)的得分总和。通常,满足这两个标准的文件将得分更高(由于总和)并且出现。

答案 1 :(得分:0)

这取决于操作。如果您正在进行OR(名称:bill或性别:男性),则需要两者中的最大值。如果你正在做一个AND,它会做一笔钱。

答案 2 :(得分:0)

Shashikant Kore说得对,每个领域的得分都是相加的。但是,这仅在queryNormcoord因素的贡献之前才有效,这意味着最终得分不会加起来。

每个分数乘以queryNorm因子,该因子是针对每个查询计算的,因此每个(name:bill)(gender:male)(name:bill OR gender:male)都有所不同。合并查询的queryNorm也不仅仅是两个单项查询的queryNorm之和。因此,如果您将每个分数除以该查询的queryNorm因子,则分数仅相加。

coord因素也可能支付一部分:默认记分员将得分乘以匹配的查询字词的比例。因此,您只能在考虑所有字词匹配的queryNorm后才能依赖求和(或coord被禁用)。

您可以使用explain功能确切了解分数的计算方式,Solr通过debugQuery=true参数提供该功能。