Solr打分算法

检索模型也就是文档和查询词的相关度的评分方法。Lucene使用布尔模型来确定哪些文档匹配上查询词,使用向量空间模型(VSM)来对这些文档评分。

核心

评分算法中的向量空间模型使用Tf-idf计算权重,对给定的词t和文档x,Tf(t,x)的值和词t在x中出现的次数正相关,而idf(t)的值和索引文档集合中包含词t的次数负相关。

 

相关名词

tf/词频 度量一个文档里词出现的频率

idf/逆向文件频率 度量一个词出现在索引中的频率

coord 文档中发现的查询词的频率

lengthNorm 根据索引列中的词总数来衡量一个词的重要度

queryNorm 归一化的参数便于比较查询

boost(index) 索引时的域的加权

boost(query) 查询时的域的加权

 

tf

函数: sqrt(freq)

意义: 一个词在文档里出现的频率越高,则该文档的分值越高

说明: 多次包含同一个词的文档的相关度更高

 

idf

函数: log(numDocs(docFreq+1) +1

意义: 一个词越多出现在不同的文档里,则它的分值越低

说明: 常见词的重要性要低于不常见的词

 

coord

函数: overlap/maxOverlap

意义: 对于查询中的词,文档中包含这些词越多分值越高

说明: 分值高的文档要更多地覆盖查询中的词

 

lengthNorm

函数: 1/sqrt(numTerms)

意义: 如果匹配上包含较少词的索引列中的词,则这个文档有较高的权重

说明: 如果一个词在含有少量词的列中,则它比在包含较多词的列中的词更重要

 

queryNorm

函数: 1/sqrt(sumOfSquaredWeights)

意义: 和文档的相关性无关,只是为了让不同的查询之间的分值有可比性

 

总结

打分算法为了达到如下效果:

包含所有搜索词的文档是好的

匹配很少出现的词比常用词更好

长文档不如短文档好

多次提及搜索词的文档更好

从正常逻辑看,基本符合预期,但是对长文档的打低分有点奇怪。于是,Lucene允许你定义min/max,指定你认为的文档长度应该是什么范围,在这个区间,lengthNorm都是1.0,低于最小值或高于最大值,lengthNorm会以几何形式下降。

---------------------

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值