我试图在Java Web Service中搜索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 [没有配置的节点可用: [{#运输#-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 ,弹性搜索和传输客户端的版本都 5.2 即可。谢谢!
答案 0 :(得分:6)
如评论中所述,
如果您使用的是除弹性搜索之外的群集名称,则需要在设置中更新相同的名称。
<tr>
<td><input type="textbox" id="quant_1" class="txtbox"></input></td>
<td><input type="textbox" id="rate_1" class="txtbox"></input></td>
</tr>
答案 1 :(得分:2)
我遇到了同样的问题,我的群集名称和一切都是正确的,但我的弹性集群正在使用X-Pack Security。而这正是因为这一点。
以下是解决方案 - https://www.elastic.co/guide/en/x-pack/current/java-clients.html
答案 2 :(得分:0)
来自文档,
// on startup
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host1"), 9300))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host2"), 9300));
答案 3 :(得分:0)
如果您是从解压文件中安装elasticsearch(例如:elasticsearch-5.4.0.tar.gz),请尝试通过yum或其他RPM工具安装它。 https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html 它帮助我解决了这个问题。
答案 4 :(得分:0)
在执行程序之前,请确保运行 ElasticSearch - &gt;下的 elasticSearch.bat 批处理文件。配置文件夹。还要确保在运行批处理文件的控制台中看到“started”。
您可以点击网址localhost:9200来检查弹性搜索是否成功启动。你应该看到一个类似这样的页面:
{
"name" : ...,
"cluster_name" : "elasticsearch",
"cluster_uuid" : ...,
"version" : {
"number" : "5.5.2",
...
"build_snapshot" : false,
"lucene_version" : "6.6.0"
},
"tagline" : "You Know, for Search"
}
答案 5 :(得分:0)
将群集名称添加为连接URI上的参数:
http://<elasticsearch_host>:9200
cluster_name
值并将其作为参数添加到连接URI:
elasticsearch://<elasticsearch_host>:9300?cluster.name=<cluster_name_value>
答案 6 :(得分:0)
This Exception is pointing to elasticSearch transport client is not able to establish connection with elasticsearch server. Root cause might be port name or IP/hostname of server OR cluster Name OR **Authentication** is incorrect.
Open elasticSearch.yaml file and validate all details correctly.
To ignore clusterName validation by using following configuration params.
client.transport.ignore_cluster_name = true
Full code snippet to create transport Client is:
Settings settingsBuilder = Settings.builder()
.put("cluster.name", DBPropertyUtil.getPropertyByName("es.cluster")).put("client.transport.sniff", true).put("client.transport.ignore_cluster_name", true).build();
//.put("client.transport.sniff", true).put("path.home", ".").build();
Client client = new PreBuiltTransportClient(settingsBuilder)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), port));
根据您的服务器指定主机和端口 这段代码对我来说很好。