Comment interroger et lister tous les types d'un index elasticsearch?
Problème:Quelle est la façon la plus correcte de simplement interroger et lister tous les types d'un index spécifique (et tous les indices) dans elasticsearch?
j'ai lu la référence et L'API mais je ne trouve rien d'évident.
je peux les indices liste avec la commande:
$ curl 'localhost:9200/_cat/indices?v'
je peux obtenir des statistiques (qui ne semblent pas inclure les types) avec la commande:
$ curl localhost:9200/_stats
Je m'attendais à ce qu'il y ait un simple commande aussi simple que:
$ curl localhost:9200/_types
ou
$ curl localhost:9200/index_name/_types
Merci pour toute aide que vous pouvez offrir.
2 réponses
Ce que vous appelez "type" est en fait un "type de projection" et la façon de les obtenir est tout simplement en utilisant:
curl -XGET localhost:9200/_all/_mapping
maintenant, puisque vous ne voulez que les noms des types de mapping, vous n'avez pas besoin d'installer quoi que ce soit, car vous pouvez utiliser simplement Python pour obtenir ce que vous voulez de cette réponse précédente:
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);'
le script Python fait quelque chose de très simple, c'est-à-dire qu'il itère sur tous les types d'indices et de mappage et ne récupère que les noms:
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
puisque vous utilisez Ruby, le même truc est disponible en utilisant le code 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} }"
le script Ruby ressemble à ceci:
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;
}