首页/数据/NoSQL 速查/field_caps 查看多索引字段类型
Elasticsearch89 条

field_caps 查看多索引字段类型

field_caps 汇总一个或多个索引里字段的类型信息,跨索引查询报字段类型冲突前,用它先核对各索引字段定义差异。

NoSQL 速查数据更新于 2026-10-13

field_caps 是什么

field_caps 汇总一个或多个索引中字段的类型信息:每个字段的 type、是否可搜索、是否可聚合,以及它出现在哪些索引里。跨索引查询报字段类型冲突、或统计结果与预期不符时,用它先核对各索引的字段定义差异,比逐个查 mapping 快得多。带上 include_unmapped 参数还会把完全不含该字段的索引一并列出,便于确认覆盖范围是否完整。

基本信息

接口GET /<index>/_field_caps?fields=*
常用参数fields、include_unmapped=true、index_filter
返回内容type、searchable、aggregatable、indices
典型问题跨索引同名字段类型不同导致查询行为不一致
所属系统Elasticsearch / OpenSearch

典型使用场景

  • 跨索引核对:同一字段在多个索引里的定义是否一致
  • 排查查询失败:类型冲突导致的报错用它先定位来源索引
  • 确认聚合可行性:看字段是否可聚合,避免写出跑不动的聚合
  • 检查覆盖范围:借 include_unmapped 找出缺少该字段的索引
  • 迁移前体检:新一批索引导入前核对字段类型是否符合预期

常见查询

常见查询
GET /logs-*/_field_caps?fields=status,message       # 只看关心的字段

GET /_field_caps?fields=*&include_unmapped=true     # 全字段,并列出缺失该字段的索引

GET /logs-*/_field_caps?fields=status&index_filter={"range":{"@timestamp":{"gte":"now-7d"}}}   # 只看最近索引

返回项读法

项含义读法
type字段类型keyword 与 text 混用会让查询行为不一致
searchable能否用于查询为 false 时该字段查不到
aggregatable能否用于聚合text 字段默认不可聚合
indices出现该字段的索引用于定位差异来源
unmapped未定义该字段的索引需 include_unmapped 才显示
字段在部分索引缺失不会让查询报错,只是那些索引里无法命中,统计口径会因为覆盖不全而偏低;跨索引报表前先确认字段覆盖范围。
同一字段名在不同索引里一个是 keyword、一个是 text,会让排序与聚合行为互不一致,迁移期用 field_caps 找出差异后统一 mapping。
多字段(text 带 keyword 子字段)与运行时字段在输出里会各占一条,看到同一名字出现多条记录时先分清是子字段还是真的类型冲突。

易错点

  • include_unmapped=true 会把完全没该字段的索引一并列出,结果更长但便于确认覆盖范围
  • 字段在部分索引缺失不会报错,只是那些索引里无法命中,统计口径要留意
  • 把 field_caps 当 mapping 用:它只给类型摘要,不含分词器与格式细节
  • 发现类型不一致却只做记录不改 mapping,同类问题会在每次新建索引时重复出现

数据来源与参考

  • Elasticsearch Guide: Field capabilities API
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌