Solr中TF(词频)计算方式及结果异常原因咨询
为什么你的Solr TF值显示为2.0?
嘿,这个问题我之前碰到过,刚好能给你拆解清楚!你可能以为TF(词频)就是目标词在文档里的原始出现次数,但Solr默认用的Lucene ClassicSimilarity(旧称DefaultSimilarity)算法里,TF的计算并不是直接用这个原始数字,而是对词频取平方根:
tf(freq) = sqrt(freq)
你这里"python"正好出现了4次,代入公式算的话,sqrt(4)结果就是2,这就是你看到TF值为2.0的原因啦。
补充小知识:
- 用平方根做归一化是有道理的:一个词在文档里出现100次的重要性,并不真的是出现10次的10倍,这种计算方式能降低高词频对最终搜索得分的过度影响。
- 如果你想要获取原始的词频数值,有两种常见方案:
- 修改Solr的相似度配置,比如换成自定义的Similarity实现,或者切换到像
BM25Similarity这类TF计算逻辑不同的算法; - 在索引阶段就把每个词的原始出现次数存储为单独的字段,查询时直接调取这个字段的值。
- 修改Solr的相似度配置,比如换成自定义的Similarity实现,或者切换到像
内容的提问来源于stack exchange,提问作者Vedanshu
相关产品推荐
相关产品推荐

