0

这是 Lucene 评分公式:

score(q,d) = coord(q,d) · queryNorm(q) · ∑ ( tf(t in d) · idf(t)2 · t.getBoost() · norm(t,d))

多场得分呢?

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

4

4 回答 4

3

您可以在相似度类中阅读评分的详细信息。在此等式中,当参数实际表示字段时,参考文档引用参数。因此,术语频率是文档中给定字段中术语的频率。这会自动处理多个字段的查询。

KenE 上面的回答是不正确的。(等式中没有 MAX 运算符。)字段上每个查询的分数加起来就是最终分数。对于查询 (name:bill OR gender:male),结果是 (name:bill) 和 (gender:male) 的得分之和。通常,同时满足这两个标准的文档将得分更高(由于总和)并出现。

于 2009-04-25T14:18:29.537 回答
0

这取决于操作。如果您正在执行 OR (姓名:比尔 OR 性别:男性),则需要两者中的最大值。如果你在做一个 AND,它会做一个总和。

于 2009-04-24T16:04:26.327 回答
0

Shashikant Kore 正确地说每个字段的分数是相加的。然而,这仅在queryNormcoord因素的贡献之前是正确的,这意味着最终分数不太可能相加。

每个分数都乘以queryNorm因子,该因子是按查询计算的,因此对于 、 和 中的每一个(name:bill)(gender:male)不同(name:bill OR gender:male)queryNorm组合查询的s也不仅仅是queryNorm两个单项查询的 s 之和。因此,仅当您将每个分数除以queryNorm该查询的因子时,分数才会相加。

coord因素也可能支付一部分:默认计分器将分数乘以匹配的查询词的比例。因此,您只能在考虑queryNorm所有术语匹配(或coord禁用)的位置之后依赖求和。

explain您可以使用Solr 中通过debugQuery=true参数提供的功能准确查看分数是如何计算的。

于 2012-11-07T12:05:58.123 回答
0

使用 lucene 的默认相似度得分,我使用了一个布尔查询并得到了最终公式如下:(对不起,它在latex

score(q, d) = \sum_{f \in fields} \sum_{t \in query} idf(t, f) queryNorm(query) \times idf(t, f) tf(t, d, f) fieldNorm(f)
于 2015-09-10T15:41:20.117 回答