2013-05-20 15 views
10

użyłem następującego kodu do tworzenia indeksu w Elastic Search, Domyślnie Java API:Tworzenie indeksu w Elastic Szukaj według Java API

Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "myClusterName").put("client.transport.sniff", true).build(); 
    Client client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress("localhost", 9200)); 
    CreateIndexRequestBuilder createIndexRequestBuilder = client.admin().indices().prepareCreate("test1"); 
    CreateIndexResponse response = createIndexRequestBuilder.execute().actionGet(); 
    System.out.println(response.isAcknowledged()); 

REST Usługi:

HttpURLConnection con = null; 
    try 
    { 
     String url = "http://localhost:9200/test2"; 

     URL resturl = new URL(url); 
     con = (HttpURLConnection) resturl.openConnection(); 

     con.setDoOutput(true); 
     con.setRequestMethod("PUT"); 
     BufferedReader in = null; 
     try 
     { 
      if (con.getInputStream() != null) 
      { 
       in = new BufferedReader(new InputStreamReader(con.getInputStream())); 
      } 
     } 
     catch (IOException e) 
     { 
      if (con.getErrorStream() != null) 
      { 
       in = new BufferedReader(new InputStreamReader(con.getErrorStream())); 
      } 
     } 
     if (in == null) 
     { 
      throw new Exception("Unable to read response from server"); 
     } 
     StringBuffer decodedString = new StringBuffer(); 
     String line; 
     while ((line = in.readLine()) != null) 
     { 
      decodedString.append(line); 
     } 
     in.close(); 
     System.out.println("4"); 
     Integer responseCode = con.getResponseCode(); 
     System.out.println(responseCode); 
    } 
    catch (Exception ex) 
    { 
     ex.printStackTrace(); 
    } 
    finally 
    { 
     if (con != null) 
     { 
      con.disconnect(); 
     } 
    } 

Za pomocą REST API, I jestem w stanie stworzyć indeks. Domyślnie JAVA API, Otrzymuję następujący wyjątek.

org.elasticsearch.client.transport.NoNodeAvailableException: No node available 
at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:202) 
at org.elasticsearch.client.transport.support.InternalTransportIndicesAdminClient.execute(InternalTransportIndicesAdminClient.java:85) 
at org.elasticsearch.client.support.AbstractIndicesAdminClient.create(AbstractIndicesAdminClient.java:200) 
at org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder.doExecute(CreateIndexRequestBuilder.java:206) 
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:62) 
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:57) 
at ElasticSearch.createIndex(ElasticSearch.java:121) 
at ElasticSearch.main(ElasticSearch.java:157) 

Proszę wskazać mi, gdzie popełniłem błąd. Dzięki z góry

Odpowiedz

8

Port dla TransportClient (poprzez Java API) jest inny niż HTTP Domyślnie, port transportClient jest 9300

+0

Dzięki za odpowiedź. Nadal dostaję ten sam wyjątek. –

+0

Teraz działa dobrze. Zrobiłem mały błąd, ponieważ użyłem 9300. Ale w config zaktualizowałem numer portu. –

6

Biorąc pod uwagę, że masz ty klient nie powinien być w stanie to zrobić wtedy:

CreateIndexResponse createResponse = client.admin().indices().create(createIndexRequest("test1")).actionGet(); 
+2

Dodałbym tylko, że metoda 'createIndexRequest' to' Requests.createIndexRequest ("test1") ' –

5

z replikami i odłamki ustawieniami:

Settings indexSettings = ImmutableSettings.settingsBuilder() 
       .put("number_of_shards", 1) 
       .put("number_of_replicas", 1) 
       .build(); 
CreateIndexRequest indexRequest = new CreateIndexRequest(index, indexSettings); 
client.admin().indices().create(indexRequest).actionGet();