我们已将solr搜索与.net项目集成,但我们面临一些与文档提升或solr评分功能相关的问题。
问题: Solr没有按照文档中的术语频率返回分数。
例如: - 我们创建了四个文件,其标题包含术语“链接”,solr返回得分如下:
1)Link ==> 6.037953
2)Link Link Link Link Link ==> 5.9249415
3)Link Link ==> 5.374235
4)Link Link Link ==> 5.2746024
任何人都可以帮助我解决solr得分或提升问题。
答案 0 :(得分:1)
Solr的评分计算非常复杂。在这里,您必须从the primal equation开始:
得分(q,d)=坐标(q,d)·queryNorm(q)·Σ(tf(t in d)· idf(t)2·t.getBoost()·norm(t,d))
您有tf
参数表示术语频率,其值是术语频率的平方根。
您还有norm
(又名fieldNorm
),用于fieldWeight
计算。我们举个例子:
链接链接链接链接
您的分数将被计算为(您可以通过添加debugQuery
参数来看到这一点):
5.9249415 = fieldWeight, product of:
2.236068 = tf(freq=5.0), with freq of:
5.0 = termFreq=5.0
idf (wich will be the same for all your scores)
0.4375 = fieldNorm(doc=177)
链路
6.037953= fieldWeight, product of:
1.0 = tf(freq=1.0), with freq of:
1.0 = termFreq=1.0
idf (wich will be the same for all your scores)
1.0 = fieldNorm
此处,link
的分数高于另一个,因为fieldWeight
是tf
,idf
和fieldNorm
的乘积。对于link
文档,最后一个更高,因为他只包含一个术语。
如上文所述:
lengthNorm - 将文档添加到索引中时计算出来的 根据文档中此字段的标记数,所以 较短的字段对分数的贡献更大。
字段中的字词越多,fieldNorm
就越低。
请注意value of this field。
因此,总而言之,在这里你有一个完美的组合,可以理解分数不仅仅根据频率计算,还可以计算你所在领域的术语数。