列出elasticsearch索引中的所有字段?

时间:2014-04-30 01:55:04

标签: elasticsearch

如何获取索引中存在的所有字段的列表(即索引文档中出现的字段,而不仅仅是映射中的字段)?

5 个答案:

答案 0 :(得分:14)

<强>解释

不要认为有任何办法可以做到这一点。但由于索引中的所有内容都会自动在映射中抛出,因此我们知道映射至少包含索引中的每个字段。从那里,您可以循环遍历映射中的每个字段,并对具有该字段的索引中的结果数进行计数。如果计数大于0,则该字段存在;如果计数为0,则该字段不是索引的一部分。由于我们知道索引中的每个字段都将存在于您的映射中,因此这应涵盖所有可能性。

一些API调用示例:

# Get the mapping
$ curl -XGET 'http://localhost:9200/index/type/_mapping?pretty'

# Count a field
$ curl -XGET 'http://localhost:9200/index/type/_count' -d '
{
    "query" : {
        "constant_score" : {
            "filter" : {
                "exists" : { "field" : "name_from_mapping" }
            }
        }
    }
}'

<强>文档

答案 1 :(得分:8)

从1.3开始,您拥有_field_names元字段。

{
  "aggs": {
    "Field names": {
      "terms": {
        "field": "_field_names", 
        "size": 10
      }
    }
  }
}

答案 2 :(得分:4)

在当前(5.2)版本中,您可以使用映射API获取所有字段名称:

GET index_name/_mapping?pretty

请参阅official document了解详情。

答案 3 :(得分:1)

您可以使用SQL查询获取字段名称列表

示例

GET _sql?format=txt
{
  "query": "DESC index_name"
}

输出

                        column                        |     type      |    mapping    
------------------------------------------------------+---------------+---------------
description                                           |VARCHAR        |text           
description.autosuggest                               |VARCHAR        |text           
description.keyword                                   |VARCHAR        |keyword        
address                                               |STRUCT         |object     

答案 4 :(得分:0)

我可能会考虑创建一个&#34; elasticsearch-index-fieldlist&#34;插件,类似于https://github.com/jprante/elasticsearch-index-termlist,如果真的没有直接的方法来获取索引中的字段列表...