当前位置: 首页 > news >正文

Elasticsearch/OpenSearch 中doc_values的作用

目录

1. 核心作用

2. 适用场景

3. 与 index 参数的对比

4. 典型配置示例

场景 1:仅用于聚合,禁止搜索

场景 2:优化大字段存储

5. 性能调优建议

6. 底层原理


doc_values 是 Elasticsearch/OpenSearch 中用于优化查询和聚合的列式存储结构,其核心作用是为非文本字段(如数值、日期、keyword 等)提供高效、低内存的数据访问方式。


1. 核心作用

  • 列式存储:将字段值按列而非行存储,减少磁盘I/O,提升聚合(Aggregation)、排序(Sorting)、脚本计算(Scripting)效率。

  • 替代倒排索引:当字段的 index: false 时,仍可通过 doc_values 支持基础查询(但性能较慢)。

  • 节省内存:避免将全部字段数据加载到堆内存(Heap),降低 JVM 压力。


2. 适用场景

  • 聚合分析(如 termsavg

  • 排序(如 sort 子句)

  • 脚本字段计算(如 script_field

  • 非文本字段的查询(如数值、日期、keyword 的 term 查询)


3. 与 index 参数的对比

特性index: true (倒排索引)doc_values: true (列式存储)
存储方式行存储(文档→词项映射)列存储(字段值紧凑排列)
主要用途快速文本搜索(如 match聚合、排序、非文本查询
内存占用高(常驻堆内存)低(可基于磁盘操作)
默认启用对非 text 字段默认启用
修改代价重建索引才能关闭可动态调整(需重建数据)

4. 典型配置示例

场景 1:仅用于聚合,禁止搜索
PUT /my_index
{"mappings": {"properties": {"price": {"type": "double","index": false,  // 禁用倒排索引(无法被高效搜索)"doc_values": true  // 允许聚合和排序}}}
}
场景 2:优化大字段存储
PUT /logs
{"mappings": {"properties": {"timestamp": {"type": "date","doc_values": true  // 默认已启用,显式声明便于理解},"raw_data": {"type": "text","doc_values": false  // text 类型不支持 doc_values}}}
}

5. 性能调优建议

  • 禁用不必要的 doc_values
    若字段无需参与聚合/排序,设置 "doc_values": false 可节省磁盘空间(如仅用于检索的 text 字段)。

  • 结合 index: false 使用
    对纯聚合字段关闭倒排索引,减少内存占用。

  • 监控字段数据内存
    通过 _stats/fielddata API 检查高内存消耗的字段。


6. 底层原理

  • 写入时构建:数据插入时同步生成列式存储文件(.dvd 和 .dvm)。

  • 磁盘存储:默认不加载到内存,按需通过文件系统缓存访问。

  • 不可变性:与倒排索引共享相同的段(Segment)机制,段合并时优化。


总结:doc_values 是 OpenSearch/Elasticsearch 中平衡查询性能与资源消耗的关键设计,尤其适合分析型场景。正确配置可显著提升聚合效率,同时避免不必要的内存开销。

http://www.xdnf.cn/news/485407.html

相关文章:

  • 工商总局可视化模版 – 基于ECharts的大数据可视化HTML源码
  • mathematics-2024《Graph Convolutional Network for Image Restoration: A Survey》
  • 力扣HOT100之二叉树:102. 二叉树的层序遍历
  • Python循环控制
  • HarmonyOS开发组件基础
  • C#中UI线程的切换与后台线程的使用
  • SkyWalking的工作原理和搭建过程
  • 【Ansible基础】Ansible执行流程详解:从Playbook到实际任务
  • fpga系列 HDL : Microchip FPGA开发软件 Libero Soc 项目仿真示例
  • Femap许可优化策略
  • 如何选择靠谱的外卖霸王餐系统进行对接?
  • 编译opencv4.11gstreamer 参考
  • 4.3/Q1,Charls最新文章解读
  • 车道线检测----CLRERNet
  • 如何备考GRE?
  • python中列表的操作
  • [基础] HPOP、SGP4与SDP4轨道传播模型深度解析与对比
  • 华三防火墙的IRF和RBM
  • HarmonyOs开发之——— ArkWeb 实战指南
  • 【51单片机中断】
  • 深入解析:构建高性能异步HTTP客户端的工程实践
  • 解锁AI:从开发密码到行业应用版图
  • 炒股中如何控制风险:构建攻守兼备的投资体系
  • 翼兴消防监控 – 大数据可视化HTML源码
  • MySQL——十一、主从复制
  • java-----线程池
  • MIMO 检测(3)--最大SINR准则(MRC、IRC)
  • 【Spark】-- DAG 和宽窄依赖的核心
  • Day27 Python打卡训练营
  • 《指针与整数相加减的深入解析》