这里是Lucene得分方程:Lucene如何计算多场得分?
得分(q,d)= coord(q,d)·queryNorm(q)·Σ(tf(t in d)·idf(t)2·t.getBoost() ·norm(t,d))
多场得分怎么样?
是否将得分直接相加或平均或..?
这里是Lucene得分方程:Lucene如何计算多场得分?
得分(q,d)= coord(q,d)·queryNorm(q)·Σ(tf(t in d)·idf(t)2·t.getBoost() ·norm(t,d))
多场得分怎么样?
是否将得分直接相加或平均或..?
这取决于操作。如果您在(名称:账单或性别:男性)中执行OR,则需要两个中的最大值。如果你正在做一个AND,它会做一笔总和。
您可以阅读Similarity课程中的得分细节。在这个等式中,当它们实际上表示场时,这些参数参照文档来引用。所以,术语频率是文档中给定字段中术语的频率。这会自动处理多个字段上的查询。
KenE上面的答案不正确。 (等式中没有MAX运算符。)场上每个查询的分数合计为最终分数。对于查询(名称:账单或性别:男性),结果是(姓名:账单)和(性别:男性)的总分。通常情况下,满足这两个标准的文件将得分较高(由于总和)并提出。
Shashikant Kore正确地说每个领域的得分是相加的。然而,这只是在queryNorm
和coord
因素的贡献之前才是真实的,这意味着最终得分不可能加起来。
每个分数由queryNorm
因子,其被每个查询计算,并因此不同的每(name:bill)
,(gender:male)
,并(name:bill OR gender:male)
相乘。组合查询的queryNorm
也不仅仅是两个单项查询的queryNorm
之和。因此,如果您将每个分数除以该查询的queryNorm
因子,则分数仅为总和。
coord
因素也可能支付一部分:默认分数器将分数乘以匹配的查询条件的比例。因此,只有在所有条件匹配(或禁用coord
)的queryNorm
之后才能依靠求和。
您可以使用Solr的debugQuery=true
参数中提供的explain
功能准确查看分数的计算方式。
使用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)
这是基于lucene 5_3_0 – vahid 2015-09-10 18:14:47
你的答案不正确。 Shashikant Kore说得对。 – 2012-09-28 15:37:18