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
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83322.shtml
英文地址,請注明出處:http://en.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區別是什么

這是一個很容易搞糊涂新手的問題,反正我剛開始從課堂的知識轉向項目網站開發時,被這些問題弄得暈頭轉向,摸不著頭腦,學的糊里糊涂,所以,寫了這么久代碼,也總結一下,為后來者傳授下經…