5

J'ai un simple code de ElasticSearch en Java comme ceci:Pourquoi mon elasticsearch n'a pas réussi à générer le client de transport dans l'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"); 
} 

}

Il est très simple mais je me suis une erreur dans la ligne suivante:

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

Il affiche un message d'erreur comme ceci:

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) 

Alors, pouvez-vous me donner des suggestions gestion, j'ai cherché la solution, et je ne peux pas trouver ça. Y a-t-il une configuration que je dois implémenter? Mon serveur elasticsearch s'est correctement exécuté. Il peut effectuer des index et recevoir des requêtes à partir de l'invite de commande. Merci ...

+0

Quelle version de ES utilisez-vous? Est-ce que vous avez un fichier nommé 'names.txt' dans votre dossier ES' config'? Pouvez-vous montrer comment vous démarrez le processus du serveur ES? Une façon simple de résoudre ce problème consiste à définir la propriété 'node.name' dans votre fichier de configuration' elasticsearch.yml'. – Val

Répondre

2

Ce code fonctionne pour moi. C'est le problème de version. Le port par défaut de TransportClient est 9300 et le code ne compile pas avec ElasticSearch 2.0

Utilisez cette:

Réglages Réglages = Settings.settingsBuilder() .put ("cluster.name", clusterName) .build()

Client client = TransportClient.builder(). Paramètres (paramètres) .build() .addTransportAddress (nouvelle InetSocketTransportAddress (nouvelle InetSocketAddress ("127.0.0.1", 9300)));

Référez: Here's the link