web-dev-qa-db-fra.com

Comment interroger et lister tous les types dans un index elasticsearch?

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.

19

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
    }
}
22
Val
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;
}
0
Ankireddy Polu