Lucene如何计算多场分数?

Lucene如何计算多场分数?,lucene,information-retrieval,Lucene,Information Retrieval,以下是Lucene评分公式: 分数(q,d)=坐标(q,d)·查询范式(q)·∑ (tf(t在d中)·idf(t)2·t.getBoost()·norm(t,d)) 多场得分呢 分数是直接求和还是求平均,还是….?这取决于操作。如果你正在做一个OR(姓名:bill或性别:male),则取二者中的最大值。如果您正在进行AND运算,它将进行求和。这取决于运算。如果你正在做一个OR(姓名:bill或性别:male),则取二者中的最大值。如果你在做AND,它将做一个总和。你可以在课堂上阅读评分的详细信

以下是Lucene评分公式:

分数(q,d)=坐标(q,d)·查询范式(q)·∑ (tf(t在d中)·idf(t)2·t.getBoost()·norm(t,d))

多场得分呢


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

这取决于操作。如果你正在做一个OR(姓名:bill或性别:male),则取二者中的最大值。如果您正在进行AND运算,它将进行求和。

这取决于运算。如果你正在做一个OR(姓名:bill或性别:male),则取二者中的最大值。如果你在做AND,它将做一个总和。

你可以在课堂上阅读评分的详细信息。在这个方程中,当参数实际上是场的平均值时,参考文献中的参数。因此,术语频率是文档中给定字段中术语的频率。这会自动处理多个字段上的查询


肯恩上面的回答是不正确的。(等式中没有MAX运算符。)字段上每个查询的分数相加为最终分数。对于查询(姓名:bill或性别:male),结果是(姓名:bill)和(性别:male)的分数之和。通常,满足这两个标准的文档将获得更高的分数(由于总和),然后出现

你可以在课堂上阅读评分的详细信息。在这个方程中,当参数实际上是场的平均值时,参考文献中的参数。因此,术语频率是文档中给定字段中术语的频率。这会自动处理多个字段上的查询


肯恩上面的回答是不正确的。(等式中没有MAX运算符。)字段上每个查询的分数相加为最终分数。对于查询(姓名:bill或性别:male),结果是(姓名:bill)和(性别:male)的分数之和。通常,满足这两个标准的文档将获得更高的分数(由于总和),然后出现

Shashikant Kore正确地说,每个领域的分数都是总和。然而,只有在
queryNorm
coord
因素贡献之前,这一点才是正确的,这意味着最终分数不太可能相加

每个分数乘以系数,该系数是每次查询计算的,因此对于
(姓名:比尔)
(性别:男性)
、和
(姓名:比尔或性别:男性)
,每个分数都不同。组合查询的
queryNorm
也不仅仅是两个单项查询的
queryNorm
s之和。因此,只有将每个分数除以该查询的
queryNorm
因子,分数才会相加

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


您可以通过Solr中的
debugQuery=true
参数准确地看到如何使用该功能计算分数。

Shashikant Kore正确地说,每个字段的分数都是总和。然而,只有在
queryNorm
coord
因素贡献之前,这一点才是正确的,这意味着最终分数不太可能相加

每个分数乘以系数,该系数是每次查询计算的,因此对于
(姓名:比尔)
(性别:男性)
、和
(姓名:比尔或性别:男性)
,每个分数都不同。组合查询的
queryNorm
也不仅仅是两个单项查询的
queryNorm
s之和。因此,只有将每个分数除以该查询的
queryNorm
因子,分数才会相加

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


您可以通过Solr中的
debugQuery=true
参数确切地看到如何使用该功能计算分数。

使用lucene的默认相似性分数,我使用了一个布尔查询,得到了如下最终公式:(抱歉,它在
latex
中)


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


这是基于lucene 5_3_0这是基于lucene 5_3_0
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)