问题: 在elasticsearch中查询并列出特定索引(和所有索引)中所有类型的最正确方法是什么?
我一直在阅读参考和API,但似乎找不到任何明显的东西.
我可以用命令列出索引:
$ curl 'localhost:9200/_cat/indices?v'
我可以使用以下命令获取统计信息(似乎不包括类型):
$ curl localhost:9200/_stats
我希望有一个简单明了的命令:
$ curl localhost:9200/_types
要么
$ curl localhost:9200/index_name/_types
谢谢你尽你所能的帮助.
你所谓的"类型"实际上是一种"映射类型",获取它们的方法只需使用:
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);'
UPDATE
由于您使用的是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 } }