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;
参考: