2012-05-04 87 views
21

我試圖從Java連接到ElasticSearch,但我只能通過HTTP進行連接。我不能使用TransportClient。 ElasticSearch REST API是否有Java客戶端封裝?如果是這樣,我該如何使用它?用於ElasticSearch的Java HTTP客戶端

回答

20

嗨有一個全新的項目只是滿足您的需求。它基於Java的Rest API Elasticsearch

看看吧!它的名字JEST

+0

我有同樣的問題,我必須能夠通過端口80連接到ES服務器。 Jest看起來不錯,但不幸的是,Jest示例應用程序已經落後於核心Jest庫。 – Phy6

9

一個新的「官方」基於REST的Java客戶端will be available從v5.0.0-alpha4開始。

+1

對不起,我相信你寫的東西在2012年完全有效,但現在有幾個開源實現。 –

+0

@BastianVoigt感謝您的關注。我已經更新了我的答案以反映最新情況。 – imotov

+0

thx更新 –

4

我們剛剛開源Flummi,一個用於Elastic Search的Java HTTP/REST客戶端。它儘可能地模仿傳輸客戶端的API,從而輕鬆移植現有的代碼。它還提供比Jest更好的抽象級別,因爲它會將所有錯誤報告爲Exceptions。試一試!

簡單的使用例子:

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

的Elasticsearch的Java SDK的Since version 5.6他們提供了一個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);