问题: 在elasticsearch中查询和列出特定索引(以及所有索引)中所有类型的最正确方法是什么?
我一直在阅读参考资料和API,但似乎找不到任何明显的东西。
我可以使用以下命令列出索引:
$ curl 'localhost:9200/_cat/indices?v'
我可以使用以下命令获取统计信息(似乎不包括类型):
$ curl localhost:9200/_stats
我希望有一个简单明了的命令:
$ curl localhost:9200/_types
或
$ curl localhost:9200/index_name/_types
感谢您提供的任何帮助。
答案 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;
}