ES倒排索引中的优化原理 inverted index

ES索引中的优化 inverted index

1、对field中的field value进行分词得到多个term(词语),建立由term映射_id的索引即为倒排索引;

2、对term进行排序 (这种也可以使用类似MySql的MyISAM的B+索引方法查询数据);

3、为了term存入内存,用term index来将term dictionary转化为索引存入内存,通过tire树建立term前缀与posting lists(或指向其地址)的映射,并确定数据所在block;

4、优化posting lists在磁盘的存储:文档在shard中存入不同segment,segment每个文档id唯一,范围0-2^31,(因此每个id原本需要4个字节存),使用frame of reference,存储id时,转化为delta-encoding的id,每个block存256个转化后的id,header首位记录了其中记录id需要的最大位数;

5、基于缓存的filter查询优化:生成(filter,segment)与id的映射,根据id的高16位分配到block,N/2^16为block id,N%2^16为block内的id,block内数据小于4096用short保存,反之用bitmap;

参考:

https://zhuanlan.zhihu.com/p/137574234

http://www.lvesu.com/?uri=/blog/main/cms-611.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容