2012-05-04 6 views
21

Я пытаюсь подключиться с Java к ElasticSearch, но я могу подключаться только через HTTP. Я не могу использовать TransportClient. Существует ли оболочка Java-клиента вокруг API-интерфейсов ElasticSearch REST? Если да, то как его использовать?Java HTTP Client для ElasticSearch

ответ

20

Привет Существует новый проект, соответствующий вашим потребностям. Это Java-интерфейс Rest API для Elasticsearch

Проверьте это! его имя JEST

+0

У меня такая же проблема, я должен иметь возможность подключаться только к ES-серверу через порт 80. Jest выглядит красиво, но, к сожалению, приложение для примера Jest находится за основной библиотекой Jest. – Phy6

9

Новый «официальный» java-клиент REST will be available, начиная с версии 5.0.0-alpha4.

+1

Извините за нижний предел, я уверен, что то, что вы написали, было действительно действительным в 2012 году, но сейчас существует несколько версий с открытым исходным кодом. –

+0

@BastianVoigt благодарит за то, что привлек это мое внимание. Я обновил свой ответ, чтобы отразить последнюю ситуацию. – imotov

+0

thx для обновления –

4

Мы только что открыли источник Flummi, клиент HTTP HTTP/REST для поиска эластичности. Он имитирует API транспортного клиента как можно ближе, упрощая перенос существующего кода. Он также обеспечивает лучший уровень абстракции, чем Jest, поскольку он сообщает обо всех ошибках с Исключениями. Попробуй!

Простой пример использования:

Flummi flummi = new Flummi("http://elasticsearch.base.url:9200"); 

SearchResponse searchResponse = flummi 
    .prepareSearch("products") 
    .setQuery(
     QueryBuilders.termQuery("color", "yellow").build() 
    ) 
    .execute(); 

System.out.println("Found " 
    + searchResponse.getHits().getTotalHits() 
    + " products"); 
searchResponse.getHits() 
    .stream().map(hit -> hit.getSource().get("name").getAsString()) 
    .forEach(name -> System.out.println("Name: " + name)); 
1

Since version 5.6 из Elasticsearch Java SDK они обеспечивают Java REST Client.

RestClient restClient = RestClient.builder(
    new HttpHost("localhost", 9200, "http"), 
    new HttpHost("localhost", 9201, "http")).build(); 

// for the RestHighLevelClient 
RestHighLevelClient client = 
    new RestHighLevelClient(restClient);