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

【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 内存使用,设置合理的熔断阈值。

相关文章:

  • Linux云原生架构:从内核到分布式系统的进化之路
  • 深入解析 Qwen3-Embedding 的模型融合技术:球面线性插值(Slerp)的应用
  • 信息收集:从图像元数据(隐藏信息收集)到用户身份的揭秘 --- 7000
  • 第1课、LangChain 介绍
  • 风控系统中常用的概念和架构学习
  • uni-app学习笔记三十三--触底加载更多和下拉刷新的实现
  • Linux性能调优:从内核到应用的极致优化
  • <3>-MySQL表的操作
  • unity ngui button按钮点击时部分区域响应,部分区域不响应
  • unity实现自定义粒子系统
  • 【无人机】地面站crazyfile-cfclient免安装方法,Python3.10的整体环境配置打包
  • 支付系统架构图
  • 【设计模式】1.简单工厂、工厂、抽象工厂模式
  • jmeter聚合报告中参数详解
  • 重新定义 AI 协同:三款开源 MCP 工具开启智能体从“聊天”到“操控”
  • Bootstrap Table开源的企业级数据表格集成
  • LLMs 系列科普文(12)
  • 七、Sqoop Job:简化与自动化数据迁移任务及免密执行
  • [深度学习]搭建开发平台及Tensor基础
  • AI书签管理工具开发全记录(十七):Sun-Panel书签同步实现
  • 安徽工程建设信息网站/软文云
  • 可信赖的坪山网站建设/查权重网站
  • 青岛网站建设铭盛信息/bt磁力链好用的引擎
  • 企业网站建设框架图/seo品牌
  • 哪个网站可有做投票搭建/seo新闻
  • 如何免费创建app/搜索引擎seo