2009-04-24 43 views
0

这里是Lucene得分方程:Lucene如何计算多场得分?

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

多场得分怎么样?

是否将得分直接相加或平均或..?

回答

0

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

+0

你的答案不正确。 Shashikant Kore说得对。 – 2012-09-28 15:37:18

3

您可以阅读Similarity课程中的得分细节。在这个等式中,当它们实际上表示场时,这些参数参照文档来引用。所以,术语频率是文档中给定字段中术语的频率。这会自动处理多个字段上的查询。

KenE上面的答案不正确。 (等式中没有MAX运算符。)场上每个查询的分数合计为最终分数。对于查询(名称:账单或性别:男性),结果是(姓名:账单)和(性别:男性)的总分。通常情况下,满足这两个标准的文件将得分较高(由于总和)并提出。

0

Shashikant Kore正确地说每个领域的得分是相加的。然而,这只是在queryNormcoord因素的贡献之前才是真实的,这意味着最终得分不可能加起来。

每个分数由queryNorm因子,其被每个查询计算,并因此不同的每(name:bill)(gender:male),并(name:bill OR gender:male)相乘。组合查询的queryNorm也不仅仅是两个单项查询的queryNorm之和。因此,如果您将每个分数除以该查询的queryNorm因子,则分数仅为总和。

coord因素也可能支付一部分:默认分数器将分数乘以匹配的查询条件的比例。因此,只有在所有条件匹配(或禁用coord)的queryNorm之后才能依靠求和。

您可以使用Solr的debugQuery=true参数中提供的explain功能准确查看分数的计算方式。

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) 
+0

这是基于lucene 5_3_0 – vahid 2015-09-10 18:14:47