如何基于筛选后的Elasticsearch文档限定GET _mapping返回的字段名
Elasticsearch 原生的_mapping接口用于返回索引的全量字段映射定义,本身不支持附带查询条件过滤匹配文档的字段列表,你可以通过以下两种原生方案实现需求:
方案1:使用带index_filter的_field_caps接口(适用于ES 7.11及以上版本,推荐)
这是最贴合需求的原生实现,可直接基于过滤条件返回匹配文档涉及的所有字段:
GET /pets/_field_caps?fields=* { "index_filter": { "match": { "family": "felines" } } }
提取返回结果中fields对象的所有键名,即可得到你需要的字段列表。查询family: dogs时替换过滤条件即可。
方案2:低版本兼容方案,基于搜索请求提取字段
如果你的ES版本低于7.11,可以通过普通搜索请求取匹配文档的字段再做提取:
GET /pets/_search { "query": { "match": { "family": "felines" } }, "size": 1, "_source": true, "filter_path": "hits.hits._source" }
提取返回结果中_source对象的键名即可得到对应字段列表。如果同过滤条件下不同文档的字段存在差异,可以将size参数调大(比如设为100),将所有返回文档的字段名做去重合并即可。
内容的提问来源于stack exchange,提问作者Claudio Merli
相关产品推荐
相关产品推荐

