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.pswp.cn/diannao/83322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用mermaid 语言绘画时序图和链路图

给大家展示一下效果, 官方地址:https://mermaid.nodejs.cn/ 官方开发地:https://mermaid.nodejs.cn/intro/#google_vignette graph LR%% 样式定义(完全保留) classDef user fill:#E1F5FE,stroke:#0288D1;classDef …

C++ Kafka客户端(cppkafka)安装与问题解决指南

一、cppkafka简介 cppkafka是一个现代C的Apache Kafka客户端库,它是对librdkafka的高级封装,旨在简化使用librdkafka的过程,同时保持最小的性能开销。 #mermaid-svg-qDUFSYLBf8cKkvdw {font-family:"trebuchet ms",verdana,arial,…

STM32的ADC模块中,**采样时机(Sampling Time)**和**转换时机(Conversion Time),获取数据的时机详解

在STM32的ADC模块中,**采样时机(Sampling Time)和转换时机(Conversion Time)**是ADC工作流程中的两个关键阶段,直接影响采样精度和系统实时性。以下是详细解析: 1. 采样时机(Samplin…

Pageassist安装(ollama+deepseek-r1)

page-assist网站:https://github.com/n4ze3m/page-assist 首先电脑配置node.js,管理员打开命令窗口输入下面命令下载bun npm install -g buncd 到你想要安装page-assist的地方(推荐桌面) 输入下列命令 git clone https://gith…

APC 荧光通道专用!Elabscience® CD11b 抗体激发 / 发射光谱精准匹配流式检测

内容概要 Elabscience APC Anti-Mouse/Human CD11b Antibody [M1/70](货号:E-AB-F1081E)是一款高特异性荧光标记抗体,适用于流式细胞术(FCM),可精准检测小鼠和人类样本中的 CD11b 髓系细胞&…

entity线段材质设置

在cesium中,我们可以改变其entity线段材质,这里以直线为例. 首先我们先创建一条直线 const redLine viewer.entities.add({polyline: {positions: Cesium.Cartesian3.fromDegreesArray([-75,35,-125,35,]),width: 5,material:material, 保存后可看到在地图上创建了一条线段…

大模型数据分析破局之路20250512

大模型数据分析破局之路 本文面向 AI 初学者、数据分析从业者与企业技术负责人,围绕大模型如何为数据分析带来范式转变展开,从传统数据分析困境谈起,延伸到 LLM MCP 的协同突破,最终落脚在企业实践建议。 🌍 开篇导语…

【MySQL】索引太多会怎样?

在 MySQL 中,虽然索引可以显著提高查询效率,但过多的索引(如超过 5-6 个)会带来以下弊端: 1. 存储空间占用增加 每个索引都需要额外的磁盘空间存储索引树(BTree)。对于大表来说,多个…

使用PocketFlowSharp创建一个Human_Evaluation示例

效果 实践 有时候AI生成的结果我们并不满意在进入下一步之前,我们需要对AI生成的结果进行人工审核,同意了才能进入下一个流程。 Human_Evaluation就是人工判断的一个简单示例。 internal class Program{static async Task Main(string[] args){// Load…

【项目】自主实现HTTP服务器:从Socket到CGI全流程解析

00 引言 ​ 在构建高效、可扩展的网络应用时,理解HTTP服务器的底层原理是一项必不可少的技能。现代浏览器与移动应用大量依赖HTTP协议完成前后端通信,而这一过程的背后,是由网络套接字驱动的请求解析、响应构建、数据传输等一系列机制所支撑…

SQL练习(6/81)

目录 1.寻找连续值 方法一:使用自连接(Self-Join) 方法二:使用窗口函数(Window Functions) 2.寻找有重复的值 GROUP BY子句 HAVING子句 常用聚合函数: 3.找不存在某属性的值 not in no…

【流程控制结构】

流程控制结构 流程控制结构1、顺序结构2、选择结构if基本选择结构if else语法多重if语法嵌套if语法switch选择结构 3、循环结构循环结构while循环结构程序调试for循环跳转语句区别 流程控制结构 1、顺序结构 流程图 优先级 2、选择结构 if基本选择结构 单if 语法 if&…

【机器人】复现 UniGoal 具身导航 | 通用零样本目标导航 CVPR 2025

UniGoal的提出了一个通用的零样本目标导航框架,能够统一处理多种类型的导航任务。 支持 对象类别导航、实例图像目标导航和文本目标导航,而无需针对特定任务进行训练或微调。 本文分享UniGoal复现和模型推理的过程~ 查找沙发,模…

python + flask 做一个图床

1. 起因, 目的: 对这个网站:https://img.vdoerig.com/ , 我也想实现这种效果。做一个简单的图床,后面,可以结合到其他项目中。 2. 先看效果 实际效果。 3. 过程: Grok 聊天: https://img.vdoerig.co…

Java生产环境设限参数教学

哈哈,这个问题问得好!咱们用开餐厅的比喻来理解生产环境的四大必须设限参数,保证你听完再也不会忘!(搓手手) 1. 堆内存上限:-Xmx(厨房的最大容量) 问题:想象…

电脑出故障驱动装不上?试试驱动人生的远程服务支持

在日常工作或学习中,驱动问题时常成为电脑用户的一大困扰。尤其是在更换硬件、重装系统、驱动冲突等情况下,许多用户往往手足无措,不知道从何下手。而“驱动人生”作为国内领先的驱动管理工具,一直以高效、便捷、智能著称。现在&a…

JS手写代码篇---手写 instanceof 方法

2、手写 instanceof 方法 instancecof用于检测一个对象是否是某个构造函数的实例。它通常用于检查对象的类型,尤其是在处理继承关系时。 eg: const arr [1,2,3,4,5]console.log(arr instanceof Array); // trueconsole.log(arr instanceof Object); // true那这是…

使用exceljs将excel文件转化为html预览最佳实践(完整源码)

前言 在企业应用中,我们时常会遇到需要上传并展示 Excel 文件的需求,以实现文件内容的在线预览。经过一番探索与尝试,笔者最终借助 exceljs 这一库成功实现了该功能。本文将以 Vue 3 为例,演示如何实现该功能,代码示例…

PMP-第十二章 项目采购管理

项目采购管理核心概念 项目采购管理包括从项目团队外部采购或获取所需产品、服务或成果的各个过程项目组织既可以是买方(甲方) ,也可以是卖方(乙 方)项目采购管理过程围绕协议来进行,协议是买卖双方之间具…

maven和npm区别是什么

这是一个很容易搞糊涂新手的问题,反正我刚开始从课堂的知识转向项目网站开发时,被这些问题弄得晕头转向,摸不着头脑,学的糊里糊涂,所以,写了这么久代码,也总结一下,为后来者传授下经…