zoukankan      html  css  js  c++  java
  • [ lucene高级 ] 细说lucene的评分机制

     最近两天重新梳理了下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)打分过程

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

  • 相关阅读:
    接口测试基础
    python学习笔记(一)
    Charles学习笔记
    接口测试笔记
    【CSS】Beginner5:Margins&Padding
    【CSS】Beginner4:Text
    【CSS】Beginner3:Color
    【CSS】Beginner2:Selectors, Properties, and Values
    【CSS】Beginner1:Applying CSS
    【HTML】Beginner9:Form
  • 原文地址:https://www.cnblogs.com/huangfox/p/2573333.html
Copyright © 2011-2022 走看看