Подтвердить что ты не робот

Как запросить и перечислить все типы в индексе elasticsearch?

Проблема:. Какой самый правильный способ просто запросить и перечислить все типы внутри определенного индекса (и всех индексов) в elasticsearch?

Я читал ссылку и API, но не могу найти ничего очевидного.

Я могу перечислять индексы с помощью команды:

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

Я могу получить статистику (которая, кажется, не включает типы) с помощью команды:

$ curl localhost:9200/_stats

Я бы ожидал, что простая команда будет простой:

$ curl localhost:9200/_types

или

$ curl localhost:9200/index_name/_types

Спасибо за любую помощь, которую вы можете предложить.

4b9b3361

Ответ 1

То, что вы называете "тип", на самом деле является "типом сопоставления", а способ его получения - просто:

curl -XGET localhost:9200/_all/_mapping

Теперь, поскольку вам нужны только имена типов сопоставления, вам не нужно ничего устанавливать, так как вы можете просто использовать Python, чтобы получить только то, что вы хотите от этого предыдущего ответа:

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

Python script делает что-то очень простое, т.е. выполняет итерацию по всем индексам и типам отображения и извлекает только последние имена:

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

Поскольку вы используете Ruby, тот же трюк доступен с помощью кода 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} }"

Ruby script выглядит следующим образом:

require 'rubygems';
require 'json';
resp = JSON.parse(STDIN.read);
resp.each { |index, indexSpec | 
    indexSpec['mappings'].each { |type, fields| 
        puts type
    }
}

Ответ 2

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;
}