Lucene之MaxScorer算法简介

Lucene的MaxScorer算法旨在解决OR查询时的效率问题,通过预先确定无需计算的项来提高搜索速度。它根据term的docFreq排序,计算每个term的最大打分(Upper Bound),在搜索阶段累加最大得分并使用最小堆调整Top-k。通过Early Termination策略减少不必要的比较,提高查询效率。引用了多篇相关文献进行理论支持。
摘要由CSDN通过智能技术生成

简介

          名叫“Lucene之MaxScorer算法分析”其实并不准确,因为有Stefan提交的MaxScorer代码尚未提交到Lucene,至今还在讨论

中,具体见:https://issues.apache.org/jira/browse/LUCENE-4571,他索所要解决的问题就是Lucene在计算Top-k时效率慢的问题。

目前Lucene对于MaxScore的计算, AND计算比较快,这个就不用优化,主要是针对OR 查询,这时需要比对每个Scorer,计算其得

这样就很耗时,导致性能很慢。其实可以预先就可以确定一些是不需要计算的,直接可以跳过,所以自1995年提出的MaxScore算

就是为解决这个问题。Stefan根据几天涉及Maxscore优化的论文为Lucene贡献了MaxScorer代码(尚未通过审核提交到Lucene),

在此感谢Stefan的贡献。


MaxScorer思想

对于一个Boolean查询,每个Term查询出来对应一个Inverted List,每个list有可能很长有可能很短,每个list中的每个doc都包含了该term,

有和当前term的一个相似性打分。那么对于每个List来说就存在一个对于当前Term的最大打分。称为该list的Upper Bound。


假设queryString=“The OR conference OR  berlin OR buzzwords”,具体MaxScore算法如下:


按照term对应的dcoFreq(包含该Term的文档数)从大到小排序。上图中方块的大小代表该文档

和term的相似性打分的大小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值