huangfox

冰冻三尺,非一日之寒!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 最近两天重新梳理了下lucene的打分算法,是基于1.9版本的(原理一致那么就选个简单的版本来看看,看着也简单利落)。

 编辑那些公式什么的也繁琐,就直接贴草稿图吧,偷个懒!

 

1)打分公式

公式的2、4、5部分只是和query相关,这部分计算在weight中完成!!!

 

2)构建weight

一下都是对termQuery进行分析,这里构建的也是TermWeight。

weight的属性value为上述公式2、4、5部分的乘积,及query的权重。

打分的过程本来就是query的权重和命中document权重的运算,这里先计算出query的权重,后面的时候交给score完成。这相当于是一个准备的工作!

 

3)构建scorer

同理这里构建的是:TermScorer

TermScorer有一些比较重要的属性,分别简单解释如下:

weight:参与运算query的等价物weight,他将query数值化;

weightValue:即为weight的值;

TermDocs:命中文档的迭代器;

norms:所有文档的norm值,至于怎么计算没有深入了解了,不过要注意的是他会全部加在到内存;

scoreCache:scoreCache是tf为0至31时,与weightValue相乘的结果的“缓存”,主要是避免重复计算,如果tf在0-31范围内,就可以直接取取了。

 

 4)打分过程

以下是打分的概要过程。细节还需参考源代码!

 

posted on 2012-07-02 16:15  huangfox  阅读(2707)  评论(1编辑  收藏  举报