如何在Elasticsearch中仅获取索引的字段名而非字段值
获取Elasticsearch指定索引的所有字段名(不含类型)
以下是几种直接获取仅字段名的实用方法:
方法1:使用_cat/fields API(简单直观)
_cat/fields API专门用于列出索引的字段信息,加上format=json参数可返回JSON格式结果,再通过工具提取字段名:
# 请求获取字段基础信息 GET /my_index/_cat/fields?v&format=json # 用jq提取字段名数组(需安装jq工具) curl -XGET "http://your-es-host:9200/my_index/_cat/fields?v&format=json" | jq '[.[] | .name]'
返回结果示例:
["field_1", "field_2.subfield_1", "field_2.subfield_2", "field_3.subfield_1.another_field"]
方法2:基于_field_caps请求过滤结果
你原本使用的_field_caps请求会返回字段类型,可通过jq提取结果中的字段名key:
# 结合jq过滤出仅字段名的结构 curl -XGET "http://your-es-host:9200/my_index/_field_caps?fields=*&filter_path=fields.*" | jq '{ fields: [keys(.fields)] }'
返回结果示例:
{ "fields": ["field_1", "field_2.subfield_1", "field_2.subfield_2", "field_3.subfield_1.another_field"] }
方法3:从索引mapping中提取(支持嵌套字段)
直接请求索引的mapping,再递归提取所有层级的字段名(包括嵌套字段):
# 请求mapping并提取字段名 curl -XGET "http://your-es-host:9200/my_index/_mapping" | jq '[path(.my_index.mappings.properties[])] | map(join("."))'
这种方法能完整获取复杂嵌套结构的字段名,适合字段层级多的索引。
注:如果没有jq工具,也可以在Kibana Dev Tools中执行
GET请求后手动提取,或用Python的json模块等工具解析结果。
内容的提问来源于stack exchange,提问作者Makrand Mandhare
相关产品推荐
相关产品推荐

