Elasticsearch文档值
在Elasticsearch中,文档值(Doc Values)是用于高效存储和检索数据的一种数据结构,特别是在处理聚合、排序和过滤操作时。文档值是Elasticsearch为每个字段生成的预先计算的格式化数据,目的是改善性能和降低内存使用。
什么是文档值(Doc Values)
文档值是将字段的数据存储在磁盘上的一种方式,使得字段的值以列式结构存储。这种存储方式使得对字段的高效检索和聚合成为可能,尤其是在处理大量文档时。
文档值的特点
-
列式存储:文档值是以列的形式存储数据,每个字段的值单独存储,从而使得在处理大型数据集时能够更快地访问。
-
序列化存储:文档值会序列化为字节流存储,能够高效利用存储空间,并减少 I/O 操作。
-
针对读操作优化:文档值的设计初衷是为了优化对字段的读操作,从而提升性能,尤其在需要频繁进行聚合、排序或过滤的情况下。
启用和禁用文档值
-
默认启用:从Elasticsearch 5.x版本开始,对于大多数字段(如文本字段、关键字字段、数字字段等),文档值默认是启用的。
-
禁用:某些字段(如
text
类型)在创建时允许禁用文档值,这样在存储大段文本时可以节省空间。但需要注意,禁用文档值会影响到此字段的聚合和排序能力。可以通过映射(mapping)设置来控制文档值的启用与否:{ "mappings": { "properties": { "my_field": { "type": "text", "doc_values": false // 禁用文档值 } } } }
性能优势
-
聚合性能:使用文档值进行聚合操作时,由于数据存储为列的形式,Elasticsearch能够直接读取相关字段值而不必对整个文档进行处理。
-
排序性能:在执行排序操作时,文档值提供了更快速的数据访问方式,允许Elasticsearch更快地整理和排序结果。
-
内存使用:文档值存储在单独的结构中,通常允许更高效的内存利用和更少的内存开销。
集成与查询
-
聚合查询:在执行聚合操作时,Elasticsearch会使用文档值的数据来计算和返回统计信息,例如
terms
聚合、avg
聚合等。 -
排序查询:使用
sort
关键字时,Elasticsearch会利用文档值进行高效排序。