elasticsearch fielddata disable会影响_score的计算吗
Elasticsearch | 作者 p1021781126 | 发布于2017年03月10日 | 阅读数:5256
在es中计算搜索文本默认是按相关度排序(_score),计算相关度需要知道文档的正排索引,对于开启analyzed string field,正排索引是存放在fielddata当中的,如果把fielddata disable掉应该就不能支持相关度排序了把?但事实情况不是这样,我disable掉text字段的fielddata后,关键词搜索text还是会按score排序,有谁能帮忙解释一下呢
2 个回复
zjjiubin
赞同来自: leighton_buaa 、p1021781126
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 - 机器学习、大数据
赞同来自: