org.elasticsearch.client.transport.NoNodeAvailableException:没有configuration的节点可用:

我在Docker上运行ElasticSearch在本地可用

 $ 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" } 

我使用Elastic4s ,连接到ElasticSearch ,我尝试了下面的方法,但他们都给了我错误

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

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

错误是

 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) 

我的完整代码是

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

9200是通过HTTP进行连接的端口,这就是您的浏览器使用它的原因。 如果你检查你的堆栈跟踪的顶部,你可以看到你通过传输客户端(即TCP)连接,所以你需要使用端口9300。 尝试这个:

 val uri = ElasticsearchClientUri("elasticsearch://192.168.99.100:9300") val client = ElasticClient.remote(uri) 

确保客户端版本与ElasticSearch服务器相同。

尝试添加启用HTTP的settigs

只需设置主机:

 val host = "YOUR HOST NAME" 

接着:

 val settings = ImmutableSettings.settingsBuilder() .put("http.enabled", true).put("cluster.name", "CLUSTER-NAME").build() val uri = ElasticsearchClientUri(s"${host}:9200") val esClient = ElasticClient .remote(settings, uri) 

它应该现在与端口9200工作