身安不如心安,屋宽不如心宽 。

elasticsearch fielddata disable会影响_score的计算吗

Elasticsearch | 作者 p1021781126 | 发布于2017年03月10日 | 阅读数:4929

在es中计算搜索文本默认是按相关度排序(_score),计算相关度需要知道文档的正排索引,对于开启analyzed string field,正排索引是存放在fielddata当中的,如果把fielddata disable掉应该就不能支持相关度排序了把?但事实情况不是这样,我disable掉text字段的fielddata后,关键词搜索text还是会按score排序,有谁能帮忙解释一下呢
已邀请:
要弄清楚这个问题,必须了解es的如何保存索引,以及score如何计算。
1. es的索引格式。
es使用lucene实现全文索引,所以只要了解lucene的索引格式即可。
lucene的全文索引主要存储两种数据:fielddata和inverted index。(其他还有一些数据,但是和此处讨论的内容没有关系,所以此处不提)
fielddata:从逻辑上看,是一个字典,用于根据文档查找数据。键为文档ID和字段名,值为字段的内容。
inverted index:也是一个字典,用于根据数据找到文档。键是一个term,值包含诸多内容。其中很重要的有:所有包含此term的文档ID,包含此term的文档数目(df),此term在每篇文档中出现的次数(tf),term在每篇文档中出现的位置等。(由于性能原因,物理上这些数据不是保存在一个字典中,而是保存在多个字典里。)
2. score如何计算
es默认以一个字段的tf-idf值作为score,这也是信息理论计算相关性的经典方法。tf-idf的算法变种有很多,但是其基础均使用tf(term frequency)和idf(inverted document frequency)计算相关性。而这两种信息都保存在inverted index中。
综上,是否保存fielddata均不影响score的计算。
3. 参考:
lucene存储:https://lucene.apache.org/core ... ption
tf-idf wiki:–idf[/url]
 

p1021781126 - 机器学习、大数据

赞同来自:

_score的计算会使用tf.idf. 匹配字段的长短等因素。tf,idf都作为储于倒排索引,不会用到正排索引fielddata。

要回复问题请先登录注册