【发布时间】:2017-08-07 04:39:16
【问题描述】:
我正在尝试从我的 Java Web 服务中的 Elastic Search 中进行搜索, 这是我现在的使用方式:
Client client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.10.150"), 9200));
SearchResponse searchResponse = client.prepareSearch().execute().actionGet();
第一行可以正常工作,但是当它进入第二行时,会出现下面的异常:
NoNodeAvailableException[配置的节点都不可用: [{#transport#-1}{TskPSVeBRR6CvCzP9EVhkQ}{192.168.10.150}{192.168.10.150:9200}]]
无论我用9200还是9300设置端口,结果都是一样的。
另外,我尝试使用 NEST 从我的 .Net 程序中进行搜索,并且运行良好。以下是我的尝试:
var node = new Uri("http://192.168.10.150:9200");
var settings = new ConnectionSettings(node).DefaultIndex("iod-2017.03.08.*");
_EsClient = new ElasticClient(settings);
var index = String.Format("iod-{0}.{1:00}.{2:00}.*", item.TriggerTime.Year, item.TriggerTime.Month, item.TriggerTime.Day);
var uniqueId = item.UniqueId.ToString();
var result = _EsClient.Search<logs>(s => s.Index(index).Query(q => q.Match(t => t.Field(l => l.id).Query(uniqueId))));
我的 Java 程序有没有做错任何事情(防火墙、库的版本、调用 API 的方法等)?我目前的Java版本是1.8.0.121,Elastic Search和Transport Client的版本都是 5.2。谢谢!
【问题讨论】:
-
你能检查一下你是否可以从你的本地机器telnet到端口9300上的ES机器吗? 9200 似乎已打开,因为您的 .NET 客户端正在使用它
-
您使用的是不是 elasticsearch 的集群名称?如果是,您是否在设置中更新了相同的内容?
-
我的问题已经解决了!你是对的,我应该使用 9300 端口,但严重的错误是我没有正确设置集群名称。在设置中设置 cluster.name 后我可以搜索。非常感谢!
-
很高兴,它解决了您的问题。在答案中添加了相同的内容。请采纳
标签: java elasticsearch