問題: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 code:
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
}
}
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;
}