我已经在Hibernate Search中工作了几个月,但仍然无法理解它带来的相关性。我总体上对它返回的结果感到满意,但是即使是最简单的测试也无法满足我的期望。
第一次测试使用的是频率(tf)。数据:
我得到的结果:
我真的对这种得分效果感到困惑。我的查询非常复杂,但是由于该测试没有涉及其他任何字段,因此可以将其简化如下:booleanjunction.should(phraseQuery).should(keywordQuery).should(fuzzyQuery)
我的分析仪如下:
StandardFilterFactory
LowerCaseFilterFactory
StopFilterFactory
SnowballPorterFilterFactory for english
计分计算确实很复杂。在这里,您必须从原始方程式开始:
分数(q,d)=坐标(q,d)·queryNorm(q)·∑(tf(t in d)·idf(t)2·t.getBoost()·norm(t,d))
如您所说,tf
这意味着项频率,其值是项频率的平方根。
但是在这里,正如您在解释中所看到的那样,您也有norm
(aka fieldNorm
)用于fieldWeight
计算。让我们举个例子:
eklavya eklavya eklavya eklavya eklavya
4.296241 = fieldWeight in 177, product of:
2.236068 = tf(freq=5.0), with freq of:
5.0 = termFreq=5.0
4.391628 = idf(docFreq=6, maxDocs=208)
0.4375 = fieldNorm(doc=177)
埃克拉夫亚
4.391628 = fieldWeight in 170, product of:
1.0 = tf(freq=1.0), with freq of:
1.0 = termFreq=1.0
4.391628 = idf(docFreq=6, maxDocs=208)
1.0 = fieldNorm(doc=170)
在这里,eklavya
比其他更好的成绩,因为fieldWeight
是的产品tf
,idf
和fieldNorm
。对于eklavya
文档来说,最后一个更高,因为他只包含一个术语。
如上述文档所述:
lengthNorm-根据文档中该字段的标记数将文档添加到索引时计算的值,以便较短的字段对得分贡献更大。
您在一个字段中使用的术语越多,含义fieldNorm
就越低。注意此字段的值。
因此,总而言之,在这里您可以完美地理解分数不仅是根据频率来计算的,而且还取决于您所在领域的学期数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句