如何查询和列出elasticsearch索引中的所有类型?

时间:2015-12-08 01:40:46

标签: indexing elasticsearch types

问题: 在elasticsearch中查询和列出特定索引(以及所有索引)中所有类型的最正确方法是什么?

我一直在阅读参考资料和API,但似乎找不到任何明显的东西。

我可以使用以下命令列出索引:

$ curl 'localhost:9200/_cat/indices?v'

我可以使用以下命令获取统计信息(似乎不包括类型):

$ curl localhost:9200/_stats

我希望有一个简单明了的命令:

$ curl localhost:9200/_types

$ curl localhost:9200/index_name/_types

感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:22)

你叫什么"键入"实际上是一种"映射类型"获得它们的方法只需使用:

curl -XGET localhost:9200/_all/_mapping

既然你只需要映射类型的名称,就不需要安装任何东西,因为你只需使用Python就可以从你之前的响应中获得你想要的东西:

curl -XGET localhost:9205/_all/_mapping | python -c 'import json,sys; indices=json.load(sys.stdin); indices = [type for index in indices for type in indices.get(index).get("mappings")]; print list(indices);'

Python脚本非常简单,即迭代所有索引和映射类型,只检索后者的名称:

import json,sys; 
resp = json.load(sys.stdin); 
indices = [type for index in resp for type in indices.get(index).get("mappings")]; 
print list(indices);'

<强>更新

由于您正在使用Ruby,因此使用Ruby代码可以获得相同的技巧:

curl -XGET localhost:9205/_all/_mapping | ruby -e "require 'rubygems'; require 'json'; resp = JSON.parse(STDIN.read); resp.each { |index, indexSpec | indexSpec['mappings'].each {|type, fields| puts type} }"

Ruby脚本如下所示:

require 'rubygems';
require 'json';
resp = JSON.parse(STDIN.read);
resp.each { |index, indexSpec | 
    indexSpec['mappings'].each { |type, fields| 
        puts type
    }
}

答案 1 :(得分:1)

您可以仅打印索引并使用_mapping API,以便在索引中仅看到“映射”部分。

例如:curl -GET http://localhost:9200/YourIndexName/_mapping?pretty

您将得到类似的内容:

{
"YourIndexName" : {
    "mappings" : {
      "mapping_type_name_1" : {
        "properties" : {
          "dateTime" : {
            "type" : "date"
          },
          "diskMaxUsedPct" : {
            "type" : "integer"
          },
          "hostName" : {
            "type" : "keyword"
          },
          "load" : {
            "type" : "float"
          },
          "memUsedPct" : {
            "type" : "float"
          },
          "netKb" : {
            "type" : "long"
          }
        }
      },
      "mapping_type_name_2" : {
        "properties" : {
          "dateTime" : {
            "type" : "date"
          },
          "diskMaxUsedPct" : {
            "type" : "integer"
          },
          "hostName" : {
            "type" : "keyword"
          },
          "load" : {
            "type" : "float"
          },
          "memUsedPct" : {
            "type" : "float"
          }
        }
      }
    }
  }
}

mapping_type_name_1和mapping_type_name_2是此索引中的类型,您还可以看到这些类型的结构。

关于mapping_types的很好的解释是在这里:https://logz.io/blog/elasticsearch-mapping/

答案 2 :(得分:0)

private Set<String> getTypes(String indexName) throws Exception{
    HttpClient client = HttpClients.createDefault();
    HttpGet mappingsRequest = new HttpGet(getServerUri()+"/"+getIndexName()+"/_mappings");
    HttpResponse scanScrollResponse = client.execute(mappingsRequest);
    String response = IOUtils.toString(scanScrollResponse.getEntity().getContent(), Charset.defaultCharset());
    System.out.println(response);
    String mappings = ((JSONObject)JSONSerializer.toJSON(JSONObject.fromObject(response).get(indexName).toString())).get("mappings").toString();
    Set<String> types = JSONObject.fromObject(mappings).keySet();
    return types;
}