2012-05-04 4 views
21

Sto provando a connettermi da Java a ElasticSearch ma posso connettermi solo tramite HTTP. Non riesco a utilizzare lo TransportClient. Esiste un wrapper client Java attorno alle API REST di ElasticSearch? Se sì, come lo uso?Client HTTP Java per ElasticSearch

risposta

20

Ciao C'è un nuovo progetto che soddisfa le tue esigenze. È basata su Java API Rest per Elasticsearch

Check it out! il suo nome è JEST

+0

Ho lo stesso problema, devo essere in grado di connettersi a un server ES solo sulla porta 80. Jest sembra carino, ma sfortunatamente l'applicazione di esempio Jest è molto indietro rispetto alla libreria Jest di base. – Phy6

9

Un nuovo client java "ufficiale" basato su REST will be available che inizia con v5.0.0-alpha4.

+1

Siamo spiacenti per il downvote, sono sicuro che ciò che hai scritto è stato perfettamente valido nel 2012, ma ora ci sono diverse implementazioni open source. –

+0

@BastianVoigt grazie per avermi segnalato questo fatto. Ho aggiornato la mia risposta per riflettere l'ultima situazione. – imotov

+0

thx per l'aggiornamento –

4

Abbiamo appena aperto l'origine Flummi, un client Java HTTP/REST per la ricerca elastica. Imita il più possibile le API del client di trasporto, semplificando il porting del codice esistente. Fornisce inoltre un livello di astrazione migliore rispetto a Jest, poiché riporta tutti gli errori con Eccezioni. Provaci!

semplice esempio di utilizzo:

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 del elasticsearch Java SDK forniscono un 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);