Elasticsearch 基础教程

Elasticsearch 高级教程

Elasticsearch 插件

Elasticsearch 笔记

es 获取 index 中所有的字段信息

Elasticsearch 笔记 Elasticsearch 笔记


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"
          },
          ...