Elasticsearch 如何快速获取索引(index)中所有的字段信息?
推荐方式
获取索引的 field 信息在不同的 es 版本,方式不同。
ES 1.3 版本以上
从 es 1.3 版本开始,官方支持获取 field 名称的接口,具体如下:
GET index/_search
{
"size"0,
"aggs": {
"user define names": {
"terms": {
"field": "_field_names",
"size": 100
}
}
}
}
从上述描述中可以看出,elasticsearch 1.3 版本开始在桶聚合的词项聚合(Terms Aggregation)中提供了 _field_names 的 API,它列出索引下所有文档包含的所有字段名称。
ES 5.x 开始
从 es 5.x 版本开始,停止了对 _field_names 的支持,没有提供单独获取字段名称的接口;但是可以使用 Mapping API 来满足需求,具体示例如下:
$ curl -XGET 'http://{es_url}:{es_http_port, eg:9200}/{index}/_mapping?pretty'
在 kibana 的 dev tools 中,可以如下:
GET {index}/_mapping
返回结果可能如下:
{
"qa": {
"mappings": {
"qa": {
"properties": {
"question": {
"type": "text",
"store": true,
"norms": false,
"index_options": "docs",
"similarity": "BM25",
"copy_to": [
"all_string"
],
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
},
"answer": {
"type": "text",
"store": true,
"norms": false,
"index_options": "docs",
"similarity": "BM25",
"copy_to": [
"all_string"
],
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
},
"all_string": {
"type": "text",
"store": false,
"similarity": "BM25",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
},
...