观察es数据目录内会发现大量文件如下图所示:
其中重要的有如下几个,存储三大头:
文件后缀 | 文件含义 |
---|---|
.fdt | 文档存储的字段值 |
.fdx | 文档索引指针,需载入内存 |
.fnm | 存储fields信息 |
.dvd | docValues值 |
.dvm | docValues原信息 |
.doc | 包含每个term词频的docs列表即倒排表 |
.pos | index中term出现的位置信息 |
.tim | term词典,存储term信息 |
.tip | term词典的索引,需载入内存 |
segment_2c | 记录提交点信息 |
write.lock | 防止多个IndexWriters写同一个文件 |
source源文档相关:
fnm,fdx,fdt 为行存储文件索引和value;
列式存储相关(sort/agg):
dvm,dvd为列式存储即docValue;
倒排索引相关:
tip,tim,pos,doc为倒排索引及词典索引相关内容。
kdd,kdi,kdm与BKD数相关:
BKD Tree,叶子节点存储一组值集合。当 es 做 ranger 查询的时候(适用于数值,日期,字符串类型),内存里的 B-tree 可以帮助快速定位到满足查询条件的叶子结点块在磁盘上的位置,之后对叶子结点块的读取几乎都是顺序的,即索引和数据分离。