• [ 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)打分过程

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

  • 相关阅读:
    《算法导论》读书笔记
    【原创】POI操作Excel导入导出工具类ExcelUtil
    10-JMM
    09-字节码执行引擎
    08-类加载机制
    07-前端编译与优化(待补充)
    06-字节码指令
    05-类文件结构
    04-垃圾回收(2)
    03-垃圾回收(1)
  • 原文地址:https://www.cnblogs.com/huangfox/p/2573333.html
Copyright © 2020-2023  润新知