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.

18
demandé sur Information Technology 2015-12-08 04:40:46

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
    }
}
21
répondu Val 2015-12-08 04:33:15
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
répondu Ankireddy Polu 2017-06-29 11:46:04