java – org. elasticsearch. client. transport. Nonodeavailableexception: no configured node is available: []

I run elasticsearch on docker, which is available locally

$curl http://192.168.99.100:9200/?pretty
{
  "status" : 200,"name" : "Collector","cluster_name" : "elasticsearch","version" : {
    "number" : "1.4.4","build_hash" : "c88f77ffc81301dfa9dfd81ca2232f09588bd512","build_timestamp" : "2015-02-19T13:05:36Z","build_snapshot" : false,"lucene_version" : "4.10.3"
  },"tagline" : "You KNow,for Search"
}

I used elastic4s to connect to elasticsearch. I tried the following methods, but all of them gave me errors

val client = ElasticClient.remote(host = "192.168.99.100",port = 9200)

and

val settings = ImmutableSettings.settingsBuilder().put("cluster.name","elasticsearch").build()
  val uri = ElasticsearchClientUri("elasticsearch://192.168.99.100:9200")
  val client = ElasticClient.remote(uri)

The mistake is

Exception in thread "main" org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []
    at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:305)
    at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:200)
    at org.elasticsearch.client.transport.support.InternalTransportClient.execute(InternalTransportClient.java:106)
    at org.elasticsearch.client.support.AbstractClient.index(AbstractClient.java:102)
    at org.elasticsearch.client.transport.TransportClient.index(TransportClient.java:340)
    at com.sksamuel.elastic4s.IndexDsl$IndexDeFinitionExecutable$$anonfun$apply$1.apply(IndexDsl.scala:23)
    at com.sksamuel.elastic4s.IndexDsl$IndexDeFinitionExecutable$$anonfun$apply$1.apply(IndexDsl.scala:23)
    at com.sksamuel.elastic4s.Executable$class.injectFuture(Executable.scala:21)
    at com.sksamuel.elastic4s.IndexDsl$IndexDeFinitionExecutable$.injectFuture(IndexDsl.scala:20)
    at com.sksamuel.elastic4s.IndexDsl$IndexDeFinitionExecutable$.apply(IndexDsl.scala:23)
    at com.sksamuel.elastic4s.IndexDsl$IndexDeFinitionExecutable$.apply(IndexDsl.scala:20)
    at com.sksamuel.elastic4s.ElasticClient.execute(ElasticClient.scala:28)
    at com.enterpriseconnector.persistence.Elastic$.insert(Elastic.scala:17)
    at com.enterpriseconnector.persistence.Test$$anonfun$1.apply(Elastic.scala:27)
    at com.enterpriseconnector.persistence.Test$$anonfun$1.apply(Elastic.scala:24)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
    at scala.collection.immutable.Range.foreach(Range.scala:166)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:245)
    at scala.collection.AbstractTraversable.map(Traversable.scala:104)
    at com.enterpriseconnector.persistence.Test$.delayedEndpoint$com$enterpriseconnector$persistence$Test$1(Elastic.scala:24)
    at com.enterpriseconnector.persistence.Test$delayedInit$body.apply(Elastic.scala:23)
    at scala.Function0$class.apply$mcV$sp(Function0.scala:34)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
    at scala.App$$anonfun$main$1.apply(App.scala:76)
    at scala.App$$anonfun$main$1.apply(App.scala:76)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35)
    at scala.App$class.main(App.scala:76)
    at com.enterpriseconnector.persistence.Test$.main(Elastic.scala:23)
    at com.enterpriseconnector.persistence.Test.main(Elastic.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

My complete code is

import java.util.Calendar

import com.sksamuel.elastic4s.{ElasticsearchClientUri,ElasticClient}
import com.sksamuel.elastic4s.ElasticDsl._
import com.sksamuel.elastic4s.source.StringDocumentSource
import org.elasticsearch.common.settings.ImmutableSettings

object Elastic {
  println("Creating Elastic Connection")
  val settings = ImmutableSettings.settingsBuilder().put("cluster.name","elasticsearch").build()
  val uri = ElasticsearchClientUri("elasticsearch://192.168.99.100:9200")
  val client = ElasticClient.remote(uri)

  def insert(monitorJson: String) = {
    client execute {
      index into "test" -> "elastic4s" doc StringDocumentSource(monitorJson)
    }
  }
}

object Test extends App {
  for (_ <- 1 to 100) yield {
    val json: String = s"{time: ${Calendar.getInstance().getTime()}}"
    println(s"inserting ${json}")
    Elastic.insert(json)
  }
}

Solution

9200 is a port connected through HTTP, which is why it can run in your browser If you check the top of the stack trace, you can see in your case that you are connecting through a transport client (that is, TCP), so you need to use port 9300 Try this:

val uri = ElasticsearchClientUri("elasticsearch://192.168.99.100:9300")
val client = ElasticClient.remote(uri)
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>