2016-02-21 15 views
5

Ho un semplice codice di elasticsearch in Java in questo modo:Perché il mio elasticsearch non è riuscito a creare transportclient in API JAVA?

public class TryElastic { 

public static void main(String[] args) throws UnknownHostException { 

    Map<String, Object> json = new HashMap<String, Object>(); 
    json.put("user","kimchy"); 
    json.put("postDate",new Date()); 
    json.put("message","trying out Elasticsearch"); 

    try { 
     Settings settings = Settings.settingsBuilder() 
      .put("cluster.name", "elasticsearch") 
      .put("client.transport.sniff", true).build(); 

     TransportClient client = TransportClient.builder().settings(settings).build(); 
     //client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); 
    } catch (NoNodeAvailableException e) { 
     System.out.println(e.toString()); 
    } 

    System.out.println("test"); 
} 

}

E 'molto semplice, ma ho avuto un errore nella riga seguente:

TransportClient client = TransportClient.builder().settings(settings).build(); 

E visualizzare il messaggio di errore così:

Exception in thread "main" java.lang.NullPointerException 
at java.io.Reader.<init>(Reader.java:78) 
at java.io.InputStreamReader.<init>(InputStreamReader.java:113) 
at org.elasticsearch.node.internal.InternalSettingsPreparer.randomNodeName(InternalSettingsPreparer.java:198) 
at org.elasticsearch.node.internal.InternalSettingsPreparer.finalizeSettings(InternalSettingsPreparer.java:177) 
at org.elasticsearch.node.internal.InternalSettingsPreparer.prepareSettings(InternalSettingsPreparer.java:64) 
at org.elasticsearch.client.transport.TransportClient$Builder.build(TransportClient.java:119) 
at TryElastic.main(TryElastic.java:64) 

Quindi, puoi darmi gestione, ho cercato la soluzione e non riesco a trovarla. C'è qualche configurazione che devo implementare? Il mio server elasticsearch ha funzionato correttamente, può eseguire indici e ottenere query dal prompt dei comandi. Grazie ...

+0

Quale versione di ES stai usando? Ti capita di avere un file chiamato 'names.txt' nella tua cartella ES' config'? Puoi mostrare come si avvia il processo del server ES? Un modo semplice per risolvere questo problema è impostare la proprietà 'node.name' nel file di configurazione' elasticsearch.yml'. – Val

risposta

2

Questo codice funziona per me. Questo è il problema della versione. Porta predefinita di TransportClient è 9300 e il codice non viene compilato con elasticsearch 2.0

Utilizzare questa:

impostazioni Impostazioni = Settings.settingsBuilder() .Put ("cluster.name", clusterName) .build(); .

Client Client = TransportClient.builder() le impostazioni (Impostazioni) .build() .addTransportAddress (nuova InetSocketTransportAddress (nuova InetSocketAddress ("127.0.0.1", 9300)));

consultare: Here's the link