160人参与 • 2025-06-11 • ar
fielddata 是 elasticsearch 中一种数据结构,用于在内存中缓存字段数据,主要服务于以下场景:
field 字段上的 term 查询)当需要对 text 字段或其他非 doc_values 支持的字段执行上述操作时,elasticsearch 需要将这些字段的值加载到内存中,这就是 fielddata 的作用。
fielddata 会占用 jvm 堆内存空间。text 字段禁用 fielddata,keyword 字段使用 doc_values 而非 fielddata。put my_index/_mapping
{
"properties": {
"my_text_field": {
"type": "text",
"fielddata": true
}
}
}get _nodes/stats/indices/fielddata?fields=*
post my_index/_cache/clear?fielddata=true
get my_index/_search
{
"size": 0,
"aggs": {
"my_terms": {
"terms": {
"field": "my_text_field" // 需要该字段启用 fielddata
}
}
}
}get my_index/_search
{
"sort": [
{
"my_text_field": {
"order": "asc"
}
}
]
}| 特性 | fielddata | doc_values |
|---|---|---|
| 构建时机 | 查询时按需构建 | 索引时预先构建 |
| 存储位置 | jvm 堆内存 | 磁盘(操作系统缓存) |
| 内存占用 | 高 | 低 |
| 适用字段类型 | 主要为 text 字段 | 主要为 keyword / numeric / date 等字段 |
| 默认启用 | text 字段默认禁用 | 支持的字段默认启用 |
fielddata 会显著增加内存使用,特别是高基数(大量唯一值)字段。fielddata 可能导致查询延迟。keyword / numeric / date 等字段,优先使用 doc_values。fielddata 熔断器防止内存耗尽。text 字段上启用 fielddata。multi-field)映射:"my_field": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}然后对 my_field.keyword 进行操作。
监控 fielddata 内存使用,设置合理的熔断阈值。
到此这篇关于elasticsearch 映射 fielddata 工作原理解析的文章就介绍到这了,更多相关elasticsearch 映射 fielddata 内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论