Elasticsearch中不同类型索引的存储机制与结构分布问询
Elasticsearch/Lucene 多字段类型的存储机制
答案很明确:每个Lucene段会包含多种数据结构,以此适配不同字段的查询需求,而非按数据结构给字段分配独立的段。
具体细节拆解:
段是Lucene里不可变的最小查询单元,每一个段在生成时,会为索引中的所有字段分别维护对应的数据结构。比如:
- 全文检索字段(如
text类型)会生成倒排索引,支持关键词匹配、分词检索; - 数值/地理类型字段会生成BKD树,高效处理范围查询、排序、地理坐标检索;
- 关键词字段(
keyword)通常同时维护倒排索引(用于精确匹配)和Doc Values(用于聚合、排序)。
- 全文检索字段(如
这种设计的核心原因是效率:段是批量写入后生成的不可变单元,同一个段内的所有字段数据是同步的。查询时可以在单个段内完成多字段的联合检索,不需要跨段关联数据,大幅降低了查询的IO开销和复杂度。
从存储文件的角度看,每个段对应独立的目录,目录下会包含对应各个字段的专属文件。比如一个包含
title(text)、price(integer)的段,目录里会有_title.fdt(字段原始数据)、_title.fdx(倒排索引字典)、_price.bkd(BKD树文件)、_price.dvd(数值Doc Values)等文件,这些都属于同一个Lucene段。
内容的提问来源于stack exchange,提问作者Ramesh
相关产品推荐
相关产品推荐

