Como consultar e listar todos os tipos dentro de um índice elasticsearch?

problema: Qual é a maneira mais correta de simplesmente consultar e listar todos os tipos dentro de um índice específico (e todos os índices) na elasticsearch?

Estive a ler as referências e a API, mas não encontrei nada óbvio.

posso listar índices com o comando:

$ curl 'localhost:9200/_cat/indices?v'

consigo estatísticas (que não parecem incluir tipos) com o comando:

$ curl localhost:9200/_stats
Eu esperava que houvesse um comando simples. como:

$ curl localhost:9200/_types

ou

$ curl localhost:9200/index_name/_types
Obrigado por qualquer ajuda que possa oferecer.

Author: Information Technology, 2015-12-08

2 answers

O que você chama de "tipo" é na verdade um "tipo de mapeamento" e a maneira de obtê-los é simplesmente usando:

curl -XGET localhost:9200/_all/_mapping

Uma vez que só quer os nomes dos tipos de mapeamento, não precisa de instalar nada, dado que pode usar simplesmente o Python para obter apenas o que deseja da resposta anterior:

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);'

O script de Python faz algo muito simples, ou seja, itera em todos os índices e tipos de mapeamento e só recupera o último nomes:

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);'

Actualizar

Já que estás a usar o Ruby, o mesmo truque está disponível usando o código 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} }"

O guião de Ruby parece-se com isto:

require 'rubygems';
require 'json';
resp = JSON.parse(STDIN.read);
resp.each { |index, indexSpec | 
    indexSpec['mappings'].each { |type, fields| 
        puts type
    }
}
 21
Author: 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
Author: Ankireddy Polu, 2017-06-29 11:46:04