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

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

 

1)打分公式

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

[ lucene高级 ] 细说lucene的评分机制

 

2)构建weight

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

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

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

[ lucene高级 ] 细说lucene的评分机制

 

3)构建scorer

同理这里构建的是:TermScorer

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

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

weightValue:即为weight的值;

TermDocs:命中文档的迭代器;

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

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

[ lucene高级 ] 细说lucene的评分机制

 

 4)打分过程

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

[ lucene高级 ] 细说lucene的评分机制

 

相关文章:

  • 2021-10-26
  • 2022-03-06
  • 2021-12-08
  • 2022-03-07
  • 2021-08-20
  • 2021-08-01
  • 2021-10-02
  • 2021-09-28
猜你喜欢
  • 2021-10-16
  • 2021-12-28
  • 2022-12-23
  • 2022-12-23
  • 2021-07-28
  • 2022-02-14
  • 2021-08-10
相关资源
相似解决方案