博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lucene评分源码调研
阅读量:6697 次
发布时间:2019-06-25

本文共 985 字,大约阅读时间需要 3 分钟。

hot3.png

Lucene Scoring 评分公式:

 154719_A6o6_1473715.png

score(q,d) = coord(q,d) · queryNorm(q) · ∑  ( tf(t in d) · idf(t)2 · t.getBoost() · norm(t,d) ) 

 

1.    公式详解:

coord(q , d)

一次搜索可能包含多个搜索词,而一篇文档中也可能包含多个搜索词,此项表示,当一篇文档中包含的搜索词越多,则此文档则打分越高。 

评分因子,是基于文档中出现查询项的个数。越多的查询项在一个文档中,说明些文档的匹配程序越高。默认是出现查询项的百分比。

queryNorm(q)

计算每个查询条目的方差和,此值并不影响排序,而仅仅使得不同的query之间的分数可以比较。其公式如下: 

         154753_2zjz_1473715.png

tf(t in d)

Term t在文档d中出现的词频

idf(t)

Term t在几篇文档中出现过

norm(t, d)

         154815_rMyq_1473715.png

标准化因子,它包括三个参数:

  1. Document boost

此值越大,说明此文档越重要。 

  1. Field boost

此域越大,说明此域越重要。 

  1. lengthNorm(field) = (1.0 / Math.sqrt(numTerms))

一个域中包含的Term总数越多,也即文档越长,此值越小,文档越短,此值越大。 

在做索引的时候由 Similarity.lengthNorm 计算。

                   154840_uwTR_1473715.png

 

2. 公式原理推导:

首先,将以上各部分代入score(q, d)公式,将得到一个非常复杂的公式,让我们忽略所有的boost,因为这些属于人为的调整,也省略coord,这和公式所要表达的原理无关。得到下面的公式:

 154906_oMgA_1473715.png

索引的时候 norm 值压缩(encode)成一个 byte 保存在索引中。搜索的时候再把索引中 norm 值解压(decode)成一个 float 值,这个 encode/decode Similarity 提供。官方说:这个过程由于精度问题,以至不是可逆的,如:decode(encode(0.89)) = 0.75

         计算这个评分涉及到几个核心的类/接口:SimilarityQueryWeightScorerSearcher,由它们或其子类来完成评分的计算。

 155106_lrkE_1473715.png

 155153_YxBh_1473715.png

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/MrMichael/blog/362318

你可能感兴趣的文章
jsp+easyui+DataGrid 例子
查看>>
tomcat的class加载的优先顺序
查看>>
php课程 4-15 数组遍历、超全局数组、表单提交数据(多看学习视频)
查看>>
FindWindow用法
查看>>
Oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解
查看>>
用反卷积(Deconvnet)可视化理解卷积神经网络还有使用tensorboard
查看>>
SuperMap iObject入门开发系列之五管线属性查询
查看>>
[转]简单的动态修改RDLC报表页边距和列宽的方法
查看>>
VS2010使用Release进行调试的三个必须设置选项
查看>>
安卓系统上的远程 JS 调试 Remote JavaScript Debugging on Android
查看>>
SEO艺术
查看>>
Python标准库
查看>>
SQL基础教程
查看>>
POJ 3683 Priest John's Busiest Day(2-ST)
查看>>
Why std::binary_search of std::list works, sorta ...(转载)
查看>>
一起谈.NET技术,在MVC2.0使用Lodop为WEB打印提出完美解决方案
查看>>
瑞星2009:3大拦截2大防御功能主动遏制木马病毒
查看>>
Android RIL源码研究笔记 の ril (一)
查看>>
手动添加mysql服务
查看>>
javascirpt历史澄清误解基本概念特点编程语言web2.0网页javascript - javascirpt知识大全...
查看>>