ES的正排索引(field data)转为doc values存储后如何做到disk上实时搜索的
Elasticsearch | 作者 echo0109 | 发布于2016年04月27日 | 阅读数:6689
elastic search在聚合的时候或者会利用到它的field data(正排数据)的时候,虽然已经将doc values存储到磁盘了,想知道如果在取了倒排索引之后,拿到例如有1000个doc id,是如何做到这么快就拿到对应的doc vlaues的,而且是读取磁盘啊,如何能做到实时的搜索呢。是否说,这其中读取了1000次磁盘。
求大牛讲解
求大牛讲解
2 个回复
flowaters
赞同来自:
https://www.elastic.co/guide/e ... .html
简单说就是,doc values做了一个 doc id到列field的正排索引,根据索引来查询的。
hapjin
赞同来自:
正排的实现有2类(2种存储方式):行式存储 和 列式存储:
列式存储就是 doc_values:https://www.elastic.co/guide/e ... .html。其目的是方便针对某一字段进行操作(比如聚合、排序),类似于 HBase的列式存储。
而行式存储,可简单地理解成:lucene index file fomart 里面的 “Stored Fields”。ES 有个store 选项就是要不要存储这个字段。
虽然说这些正排数据都存储在磁盘上,但是:它们都是经过精细的数据结构并且压缩编码后的,因而在通过倒排索引锁定 doc_id 后,能快速到找 doc_id 对应的 域字段(field)