2016-02-21 10 views
5

Ich habe einen einfachen Code von Elasticsearch in Java wie folgt aus:Warum konnte mein elasticsearch keinen Transportclient in JAVA API erstellen?

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"); 
} 

}

Es ist sehr einfach, aber ich habe einen Fehler in der folgenden Zeile:

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

Es Fehlermeldung angezeigt wie folgt:

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) 

Also, können Sie mir geben, sug Gestion, ich habe nach der Lösung gesucht, und ich kann das nicht finden. Gibt es irgendeine Konfiguration, die ich implementieren muss? Mein elasticsearch-Server wurde korrekt ausgeführt. Er kann den Index ausführen und Abfragen von der Eingabeaufforderung abrufen. Danke ...

+0

Welche Version von ES verwenden Sie? Haben Sie zufällig eine Datei namens 'names.txt' in Ihrem ES' config'-Ordner? Können Sie zeigen, wie Sie den ES-Serverprozess starten? Eine einfache Möglichkeit, dies zu beheben, besteht darin, die Eigenschaft 'node.name' in Ihrer Konfigurationsdatei' elasticsearch.yml' zu setzen. – Val

Antwort

2

Dieser Code funktioniert für mich. Dies ist das Versions-Problem. Standard-Port von TransportClient ist 9300 und der Code kompiliert nicht mit Elasticsearch 2,0

verwenden:

Einstellungen Einstellungen = Settings.settingsBuilder() .put ("cluster.name", cluster) .build(); .

Client-client = TransportClient.builder() Einstellungen (Einstellungen) .build() .addTransportAddress (neu InetSocketTransportAddress (neu InetSocketAddress ("127.0.0.1", 9300)));

Siehe: Here's the link