Problème: Quel est le moyen le plus correct de simplement interroger et répertorier tous les types dans un index spécifique (et tous les index) dans elasticsearch?
J'ai lu la référence et l'API mais je n'arrive pas à trouver quelque chose d'évident.
Je peux lister des index avec la commande:
$ curl 'localhost:9200/_cat/indices?v'
Je peux obtenir des statistiques (qui ne semblent pas inclure de types) avec la commande:
$ curl localhost:9200/_stats
Je m'attendrais à ce qu'il y ait une commande simple aussi simple que:
$ curl localhost:9200/_types
ou
$ curl localhost:9200/index_name/_types
Merci pour toute aide que vous pouvez offrir.
Ce que vous appelez "type" est en réalité un "type de mappage" et la façon de les obtenir est simplement en utilisant:
curl -XGET localhost:9200/_all/_mapping
Maintenant que vous ne voulez que les noms des types de mappage, vous n'avez rien à installer, vous pouvez simplement utiliser Python pour obtenir uniquement ce que vous voulez dans la 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 est très simple, c’est-à-dire qu’il parcourt tous les index et types de mappage et ne récupère que les noms de ces derniers:
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);'
METTRE À JOUR
Puisque vous utilisez Ruby, la même astuce 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;
}