Lucene默认的打分算法——ES默认
改变Lucene的打分模型
随着Apache Lucene 4.0版本在2012年的发布,这款伟大的全文检索工具包终于允许用户修改默认的基于TF/IDF原理的打分算法。Lucene API变得更加容易修改和扩展打分公式。但是,对于文档的打分计算,Lucene并只是允许用户在打分公式上修修补补,Lucene 4.0推出了更多的打分模型,从根本上改变了文档的打分公式,允许用户使用不同的打分公式来计算文档的得分。在本节,我们将深入了解Lucene 4.0的新特性,以及这些特性如何融入ElasticSearch。
可用的相似度模型
前面已经提到,除了Apache Lucene 4.0以前版本中原来支持的默认相似度模型,TF/IDF模型同样支持。该模型在 第2章 强大的用户查询语言DSL 的 Lucene 默认打分算法一节中已经详细论述了。
新引入了三种相似度模型:
- Okapi BM25:这是一种基于概率模型的相似度模型,对于给定的查询语句,该模型会估计每个文档与查询语句匹配的概率。为了在ElasticSearch中使用 该相似度模型,用户需要使用模型的名称,BM25。据说,Okapi BM25相似度模型最适合处理短文本,即关键词的重复次数对整个文档得分影响比较大的文本。
- Divergence from randomness:这是一种基于同名概率模型的相似度模型。想要在ElasticSearch使用该模型,就要用到名称,DFR。据说该相似度模型适用于自然语言类的文本。
- Information based:这是最后一个新引入的相似度模型,它与Diveragence from randomness模型非常相似。想要在ElasticSearch使用该模型,就要用到名称,IB。与DFR相似度模型类似,据说该模型也适用于自然 语言类的文本。
Lucene默认的打分算法
当谈论到查询的相关性,很重要的一件事就是对于给定的查询语句,如何计算文档得分。首先要弄清楚的是文档得分是什么。文档得分是一个用来描述查询语句和文档之间匹配程度的变量。在本节,我们将学习Lucene默认的打分机制:TF/IDF(term frequency/inverse document frequecy)算法,以及它是如何对相关文档进行打分排序。理解默认的打分算法对设计复杂查询语句来说至关重要,特别是在决定各个查询子句权重的时候。
匹配文档的打分因子
当一个文档出现在了搜索结果中,这就意味着该文档与用户给定的查询语句是相匹配的。Lucene会对匹配成功的文档给定一个分数。至少从 Lucene这个层面,从打分公式的结果来看,分数值越高,代表文档相关性越高。 自然而然,我们可以得出:两个不同的查询语句对同一个文档的打分将会有所不同,但是比较这两个得分是没有意义的。用户需要记住的是:我们不仅要避免去比较 不同查询语句对同一个文档的打分结果,还要避免比较不同查询语句对文档打分结果的最大值。这是因为文档的得分是多个因素共同影响的结果,不仅有权重 (boosts)和查询语句的结构起作用,还有匹配关键词的个数,关键词所在的域,查询归一化因子中用到的匹配类型……。在极端情况下,只是因为我们用了 自定义打分的查询对象或者由于倒排索引中词的动态变化,相似的查询表达式对于同一个文档都会产生截然不同的打分。
暂时还是先回来继续探讨打分机制。为了计算出一个文档的得分,我们必须考虑如下的因素:
- 文档权重(Document boost):在索引时给某个文档设置的权重值。
- 域权重(Field boost):在查询的时候给某个域设置的权重值。
- 调整因子(Coord):基于文档中包含查询关键词个数计算出来的调整因子。一般而言,如果一个文档中相比其它的文档出现了更多的查询关键词,那么其值越大。
- 逆文档频率(Inerse document frequency):基于Term的一个因子,存在的意义是告诉打分公式一个词的稀有程度。其值越低,词越稀有(这里的值是指单纯的频率,即多少个文档中出现了该词;而非指Lucene中idf的计算公式)。打分公式利用这个因子提升包含稀有词文档的权重。
- 长度归一化(Length norm):基于域的一个归一化因子。其值由给定域中Term的个数决定(在索引文档的时候已经计算出来了,并且存储到了索引中)。域越的文本越长,因子的权重越低。这表明Lucene打分公式偏向于域包含Term少的文档。
- 词频(Term frequency):基于Term的一个因子。用来描述给定Term在一个文档中出现的次数,词频越大,文档的得分越大。
- 查询归一化因子(Query norm):基于查询语句的归一化因子。其值为查询语句中每一个查询词权重的平方和。查询归一化因子使得比较不同查询语句的得分变得可行,当然比较不同查询语句得分并不总是那么易于实现和可行的。
TF/IDF打分公式
接下来看看打分公式的庐山真面目。如果只是为了调整查询语句之间的关联关系,用户不必去理解它的原理。但是至少要知道它是如何工作的。
Lucene概念上的打分公式
TF/IDF公式的概念版是下面这个样子的:

上面的公式展示了布尔信息检索模型和向量空间信息检索模型的组合。我们暂时不去讨论它,直接见识实际应用的公式,它是在Lucene实现并且正在使用的公式。
Lucene默认的打分算法——ES默认的更多相关文章
- Cloudera Manager集群官方默认的各个组件开启默认顺序(图文详解)
不多说,直接上干货! 如下是 Cloudera Manager集群官方默认的各个组件开启默认顺序. http://192.168.80.31:7180/cmf/clusters/1/express-a ...
- js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快、简单 post:安全,量大,不缓存)(服务器同步和异步区别:同步:等待服务器响应当中浏览器不能做别的事情)(ajax和jquery一起用的)
js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快.简单 post:安全,量大,不缓存)( ...
- C# 方法默认访问级别 : private C# 类默认访问级别 : internal
C# 方法默认访问级别 : private C# 类默认访问级别 : internalpublic:访问不受限制.protected:访问仅限于包含类或从包含类派生的类型.Internal:访问仅限于 ...
- 当web项目没有配置<welcome-file>index_1.jsp</welcome-file>默认标签启动tomcat后默认访问的页面是什么呢?
当web项目没有配置index_1.jsp默认标签启动tomcat后默认访问的页面是什么呢? 结果我启动后居然默认打开了index.jsp页面 为什么呢?为什么会访问我的.indexjsp页面呢?不是 ...
- lucene实战--打分算法没有那么难!
作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用,甚至某些商业软件也采用了L ...
- ES doc_values介绍2——本质是field value的列存储,做聚合分析用,ES默认开启,会占用存储空间
一.doc_values介绍 doc values是一个我们再三重复的重要话题了,你是否意识到一些东西呢? 搜索时,我们需要一个“词”到“文档”列表的映射 排序时,我们需要一个“文档”到“词“列表的映 ...
- Solr相似度算法一:DefaultSimilarity(基于TF-IDF的默认相似度算法)
默认的similarity是基于TF/IDF 模块. 该 similarity有以下配置选项: discount_overlaps –确定是否重叠的标识(标记位置增量为0)都将被忽略在正常计算的时候. ...
- ES doc_values介绍——本质是field value的列存储,做聚合分析用,ES默认开启,会占用存储空间(列存储压缩技巧,除公共除数或者同时减去最小数,字符串压缩的话,直接去重后用数字ID压缩)
doc_values Doc values are the on-disk data structure, built at document index time, which makes this ...
- CSS - 如何实现强制不换行、自动换行、强制换行 以及 chrom默认焦点 IE下 Input 默认出现叉
*:focus {outline: none;} input::-ms-clear {display:none;} 一般的文字截断(适用于内联与块): .text-overflow { display ...
随机推荐
- 身份证号码 javascript 验证
function checkIsIdno(idcard) { var Errors=new Array( "SUCCESS", "身份证号码位数不对!", &q ...
- Java函数的基本知识
http://blog.csdn.net/cxwen78/article/details/7322891主要从Java函数的定义,函数的特点,函数的应用,函数的重载四个方面来讲解Java函数. 一.函 ...
- layui.layer独立组件--解释
网站文档-链接:http://www.layui.com/doc/modules/layer.html layer至今仍作为layui的代表作,她的受众广泛并非偶然,而是这五年多的坚持,不断完善和维护 ...
- Java设计模式(九)责任链模式 命令模式
(十七)责任链模式 责任链模式的目的是通过给予多个对象处理请求的机会,已解除请求发送者与接受者之间的耦合关系.面对对象的开发力求对象之前保持松散耦合,确保对象各自的责任最小化.这种设计能够使得系统更加 ...
- ubuntu16.04 Cmake学习二
本节主要总结编译程序的时候使用了第三方库的情况,以调用开源opencv-2.4.9为例子,具体安装详见http://www.cnblogs.com/xsfmg/p/5900420.html. 工程文件 ...
- 在tomcat中用jndi配置数据源启动java web程序
1.在web.xml中添加: <resource-ref> <res-ref-name>jdbc/MTSDB</res-ref-name> <re ...
- Java 获取本地IP地址
private static String getIpAddress( ){ String ip = ""; Collection<InetAddress> colIn ...
- 10 redis--频道发布与消息订阅
消息订阅 使用办法: 订阅端: Subscribe 频道名称 发布端: publish 频道名称 发布内容 客户端例子: redis 127.0.0.1:6379> subscribe news ...
- 制作FAT12软盘以查看软盘的根目录条目+文件属性+文件内容
[-1]Before for specific info , please visit http://wiki.osdev.org/Loopback_Device [0]我们先上干货,看到效果后,我们 ...
- [Python]xlrd 读取excel 日期类型2种方式
有个excle表格须要做一些过滤然后写入数据库中,可是日期类型的cell取出来是个数字,于是查询了下解决的办法. 主要的代码结构 data = xlrd.open_workbook(EXCEL_PAT ...