I am using Elasticsearch in a Java Project using Maven:
... <elasticsearch.version>6.7.0</elasticsearch.version> ... <!-- Elasticsearch --> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>${elasticsearch.version}</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>${elasticsearch.version}</version> </dependency> <dependency> <groupId>org.elasticsearch.plugin</groupId> <artifactId>transport-netty4-client</artifactId> <version>${elasticsearch.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-to-slf4j</artifactId> <version>2.8.2</version> </dependency> <!-- Elasticsearch -->
When I try to initialize a TransportClient in order to index a document it gives me the error:
NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{BHMBbfcrSUOM_Pyaf1LcnA}{localhost}{127.0.0.1:9300}]]
Maybe a need to add more information in config/elasticsearch.yaml about transportartion or the current configuration is wrong.
Java code:
TransportAddress address; TransportClient client; Settings settings; try { address = new TransportAddress(InetAddress.getByName("localhost"), 9300); settings = Settings .builder() .put("cluster.name", "lib2life") .put("client.transport.sniff", true) .build(); /* Initiate Transport Client */ client = new PreBuiltTransportClient(settings) .addTransportAddress(address); /* Verify it cluster is healthy */ ClusterHealthResponse clusterResponse = client .admin() .cluster() .prepareHealth() .setWaitForGreenStatus() .setTimeout(TimeValue.timeValueSeconds(5)) .execute() //Error here .actionGet(); ... (more code) }
elasticsearch.yaml:
# ---------------------------------- Cluster ----------------------------------- # # Use a descriptive name for your cluster: # cluster.name: lib2life # # ---------------------------------- Network ----------------------------------- # # Set the bind address to a specific IP (IPv4 or IPv6): # #network.host: 192.168.0.1 network.host:localhost network.transport.tcp.port:9300 # # Set a custom port for HTTP: # #http.port: 9200 # # For more information, consult the network module documentation. #
(The other info inside elasticsearch.yaml is commented)
localhost:9200 gives me:
{ "name" : "IRINAMW7", "cluster_name" : "lib2life", "cluster_uuid" : "-wL1-xdESnyoknD2ZqALDQ", "version" : { "number" : "7.1.1", "build_flavor" : "default", "build_type" : "zip", "build_hash" : "7a013de", "build_date" : "2019-05-23T14:04:00.380842Z", "build_snapshot" : false, "lucene_version" : "8.0.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
Advertisement
Answer
I solved the problem. The issue was that I was using Elasticsearch 6.7.0 version with TransportClient, which is deprecated and replaced by RestHighLevelClient. Also, I had to use port 9200 and to uncomment http.port: 9200 and discovery.seed_hosts: [“host1”, “host2”] from elasticsearch.yaml