【Elasticsearch】映射:fielddata 詳解

映射:fielddata 詳解

  • 1.fielddata 是什么
  • 2.fielddata 的工作原理
  • 3.主要用法
    • 3.1 啟用 fielddata(通常在 text 字段上)
    • 3.2 監控 fielddata 使用情況
    • 3.3 清除 fielddata 緩存
  • 4.使用場景示例
    • 示例 1:對 text 字段進行聚合
    • 示例 2:對 text 字段進行排序
  • 5.fielddata 與 doc_values 的區別
  • 6.注意事項
  • 7.最佳實踐

1.fielddata 是什么

fielddata 是 Elasticsearch 中一種數據結構,用于在內存中緩存字段數據,主要服務于以下場景:

  • 聚合操作(Aggregations)
  • 排序(Sorting)
  • 腳本計算(Scripting)
  • 某些類型的查詢(如 field 字段上的 term 查詢)

當需要對 text 字段或其他非 doc_values 支持的字段執行上述操作時,Elasticsearch 需要將這些字段的值加載到內存中,這就是 fielddata 的作用。

2.fielddata 的工作原理

  • 按需加載:當第一次需要對某個字段執行聚合 / 排序等操作時,Elasticsearch 會從磁盤讀取該字段的所有值并構建內存中的數據結構。
  • 存儲在 JVM 堆內存fielddata 會占用 JVM 堆內存空間。
  • 字段級啟用:默認情況下,text 字段禁用 fielddatakeyword 字段使用 doc_values 而非 fielddata

3.主要用法

3.1 啟用 fielddata(通常在 text 字段上)

PUT my_index/_mapping
{"properties": {"my_text_field": { "type":     "text","fielddata": true}}
}

3.2 監控 fielddata 使用情況

GET _nodes/stats/indices/fielddata?fields=*

3.3 清除 fielddata 緩存

POST my_index/_cache/clear?fielddata=true

4.使用場景示例

示例 1:對 text 字段進行聚合

GET my_index/_search
{"size": 0,"aggs": {"my_terms": {"terms": {"field": "my_text_field"  // 需要該字段啟用 fielddata}}}
}

示例 2:對 text 字段進行排序

GET my_index/_search
{"sort": [{"my_text_field": {"order": "asc"}}]
}

5.fielddata 與 doc_values 的區別

特性fielddatadoc_values
構建時機查詢時按需構建索引時預先構建
存儲位置JVM 堆內存磁盤(操作系統緩存)
內存占用
適用字段類型主要為 text 字段主要為 keyword / numeric / date 等字段
默認啟用text 字段默認禁用支持的字段默認啟用

6.注意事項

  • 內存消耗fielddata 會顯著增加內存使用,特別是高基數(大量唯一值)字段。
  • 性能影響:首次加載 fielddata 可能導致查詢延遲。
  • 替代方案:對于 keyword / numeric / date 等字段,優先使用 doc_values
  • 熔斷機制:Elasticsearch 有 fielddata 熔斷器防止內存耗盡。

7.最佳實踐

  • 盡量避免在 text 字段上啟用 fielddata

  • 如需對文本進行聚合/排序,考慮使用多字段(multi-field)映射:

    "my_field": {"type": "text","fields": {"keyword": {"type": "keyword"}}
    }
    

    然后對 my_field.keyword 進行操作。

  • 監控 fielddata 內存使用,設置合理的熔斷閾值。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86504.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86504.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86504.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開源 vGPU 方案:HAMi,實現細粒度 GPU 切分

本文主要分享一個開源的 GPU 虛擬化方案:HAMi,包括如何安裝、配置以及使用。 相比于上一篇分享的 TimeSlicing 方案,HAMi 除了 GPU 共享之外還可以實現 GPU core、memory 得限制,保證共享同一 GPU 的各個 Pod 都能拿到足夠的資源。…

PlayDiffusion上線:AI語音編輯進入“無痕時代”

在語音合成與語音編輯領域,一個長期存在的挑戰是如何在修改語音內容的同時,保持原始語音的自然性、連貫性和說話人特征。近日,一款名為 PlayDiffusion 的新型 AI 語音修復模型應運而生,成功實現了這一目標。 PlayDiffusion 是一個…

2025年能源電力系統與流體力學國際會議 (EPSFD 2025)

2025年能源電力系統與流體力學國際會議(EPSFD 2025)將于本年度在美麗的杭州盛大召開。作為全球能源、電力系統以及流體力學領域的頂級盛會,EPSFD 2025旨在為來自世界各地的科學家、工程師和研究人員提供一個展示最新研究成果、分享實踐經驗及…

微信小程序前端面經

一、技術棧與編碼能力(10min) 1. Vue 3 & Composition API Q1:請解釋一下 ref 和 reactive 的區別?你在項目中是如何使用的? 答:ref是包裝一個原始值或對象,通過.value訪問,r…

rknn toolkit2搭建和推理

安裝Miniconda Miniconda - Anaconda Miniconda 選擇一個 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh進行安裝 下面配置一下載源 # 清華大學源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…

WordPress插件:AI多語言寫作與智能配圖、免費AI模型、SEO文章生成

厭倦手動寫WordPress文章?AI自動生成,效率提升10倍! 支持多語言、自動配圖、定時發布,讓內容創作更輕松! AI內容生成 → 不想每天寫文章?AI一鍵生成高質量內容!多語言支持 → 跨境電商必備&am…

Houdini POP入門學習07 - 分組

使用PopGroup可對粒子進行分組操作,并通過表達式從而更靈活的處理粒子行為。 1.創建box作為發射器,連接popnet節點。 2.雙擊進入popnet,添加popwind添加向上風力。現在播放粒子可見粒子向上方移動。 3.添加popgroup進行分組,開啟…

機器學習復習3--模型評估

誤差與過擬合 我們將學習器對樣本的實際預測結果與樣本的真實值之間的差異稱為:誤差(error)。 誤差定義: ①在訓練集上的誤差稱為訓練誤差(training error)或經驗誤差(empirical error&#x…

Docker 鏡像上傳到 AWS ECR:從構建到推送的全流程

一、在 EC2 實例中安裝 Docker(適用于 Amazon Linux 2) 步驟 1:連接到 EC2 實例 ssh -i your-key.pem ec2-useryour-ec2-public-ip步驟 2:安裝 Docker sudo yum update -y sudo amazon-linux-extras enable docker sudo yum in…

MobileNet 改進:基于MobileNetV2和SSPP的圖像分類

1.創新點分析 在計算機視覺領域,高效的圖像分類模型一直是研究熱點。 本文將詳細解析一個結合了MobileNetV2和空間金字塔池化(SSPP)的深度學習模型實現。 模型概述 這個代碼實現了一個輕量級但功能強大的圖像分類器,主要包含兩個核心組件: MobileNetV2作為特征提取器 自定…

Java中List的forEach用法詳解

在 Java 中,List.forEach() 是 Java 8 引入的一種簡潔的遍歷集合元素的方法。它基于函數式編程思想,接受一個 Consumer 函數式接口作為參數,用于對集合中的每個元素執行操作。 基本語法 java 復制 下載 list.forEach(consumer); 使用示…

涂鴉T5AI手搓語音、emoji、otto機器人從入門到實戰

“🤖手搓TuyaAI語音指令 😍秒變表情包大師,讓萌系Otto機器人🔥玩出智能新花樣!開整!” 🤖 Otto機器人 → 直接點明主體 手搓TuyaAI語音 → 強調 自主編程/自定義 語音控制(TuyaAI…

計算機視覺與深度學習 | 基于MATLAB的相機標定

基于MATLAB的相機標定:原理、步驟與代碼實現 相機標定 基于MATLAB的相機標定:原理、步驟與代碼實現MATLAB相機標定完整流程1. 準備工作2. 采集標定圖像3. 導入圖像并檢測角點4. 生成世界坐標5. 執行相機標定6. 分析標定結果7. 應用標定結果校正圖像相機標定關鍵概念相機參數類…

物聯網專業核心課程以及就業方向

物聯網專業作為信息技術與產業應用深度融合的交叉學科,其課程體系覆蓋硬件、軟件、網絡、數據等全鏈條技術,就業方向則隨智能技術普及呈現多元化趨勢。以下是基于最新行業動態與教育實踐的系統分析: 📚 一、物聯網專業核心課程體系…

mac 安裝homebrew (nvm 及git)

mac 安裝nvm 及git 萬惡之源 mac 安裝這些東西離不開Xcode。及homebrew 一、先說安裝git步驟 通用: 方法一:使用 Homebrew 安裝 Git(推薦) 步驟如下:打開終端(Terminal.app) 1.安裝 Homebrew…

vue3 定時器-定義全局方法 vue+ts

1.創建ts文件 路徑&#xff1a;src/utils/timer.ts 完整代碼&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 創建定時器con…

線性代數證明:把行列式的某一行(列)的k倍加到另一行(列),行列式的值不變

線性代數證明 把行列式的某一行&#xff08;列&#xff09;的k倍加到另一行&#xff08;列&#xff09;&#xff0c;行列式的值不變&#xff1a; 注意五角星的位置要用到另一條性質&#xff1a;若行列式的某一行&#xff08;列&#xff09;的元素都是兩數之和&#xff0c;則可以…

webrtc 在線測試, 如何在線拉流測試

1. 如下所示&#xff0c;使用騰訊提供的網頁即可&#xff0c;非常贊&#xff0c;測試直播拉流 webrtc協議 WebRTC Player Demo 2.截圖&#xff1a;

基于Flask前后端分離智慧安防小區系統

基于Flask前后端分離智慧安防小區系統 本項目是一個基于前后端分離架構的智慧安防小區管理系統&#xff0c;采用現代化的技術棧和完善的功能設計&#xff0c;旨在提供一個高效、安全的小區管理解決方案。 技術架構 前端技術棧 基于Vue 3框架開發參考Geeker-Admin項目的基礎…

深入解析 Linux 死鎖:原理、原因及解決方案

深入解析 Linux 死鎖&#xff1a;原理、原因及解決方案 目錄 **深入解析 Linux 死鎖&#xff1a;原理、原因及解決方案**前言&#xff1a;一次凌晨 3 點的 “服務器崩潰”&#xff0c;揭開死鎖的致命性一、死鎖的基礎&#xff1a;資源與競爭的 “導火索”1.1 資源&#xff1a;死…