lucene笔记——排序

1.Lucene评分结果分析
Lucene在IndexSearcher中提供了一个explain方法,用来返回检索结果每一条文档的详细评分内容,
我们可以根据每一个计算因子的情况,调整或者修改排序算法、增减不同文档的权重,来达到自己期望的效果。
一般查看内容包括检索词的出现次数tf、逆文档频率idf、权值Boost以及文档的长度因子fieldNorm。
2.Lucene排序公式
根据Lucene的代码和文档介绍,Lucene计算排序结果需要一系列的计算因子,这些因子大多数通过Similarity实例实现。
默认情况下Lucene使用DefaultSimilarity来实现Similarity类。具体实现在DefaultSimilarity.java文件中。
Lucene的检索结果得分情况通过Score函数得到,公式为
score(q,d)=coord(q,d) * queryNorm(q) * ∑t in q(tf(t in d) * idf(t)2 * t.getBoost() * norm(t,d)),
其中 ∑之后为基本排序公式。
如下分析一些重要因子。


a)文档频率tf(t in d)表示的是查询词中,每个term在对应的结果文档d中的出现次数。查询词出现的次数越多,表示出现的频率越高,
文档的检索得分就越高。实际计算中,使用实际次数的平方根作为文档频率tf的值,避免数值过度放大。


b)逆文档频率idf(t)表示的是检索匹配文档数量的反向函数。文档出现的次数越少,每一篇文档的信息量就会越大。所以匹配的文档数越少,
得分就越高。而索引库中文档总数越多,找到一篇目标文档的难度越困难,相应的信息量也会比较大。


c)长度因子LengthNorm是某个索引词汇在域中的总长度决定的,这个参数在索引建立时确定。数值根据文档中实际具有的索引项个数决定。
索引词长度在文档总长度中占得比例越大,长度因子的数值也越大。


d)Boost因子是索引项的权重参数,用来控制文档的重要性。


e)queryNorm是一个调节因子,主要用来让排序结果在不同的查询条件之间可以比较。数值是根据每一个查询项权重的平方和计算得到。


f)coord函数是一个协调因子,表示的是文档d中term出现的百分比,也就是计算查询条件q中不同term,以及在文档中出现的数量之和、
两者的数量之比、通常在文档中出现的查询term种类越多,分值越高。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值