[使用ElasticSearch 2.0版]
在etc / hosts文件中,“esnode”映射到IP地址(运行ES的其他一些机器),如图所示
192.168.2.219 esnode
传输客户端代码是::
public Client getClient() {
if ((this.client == null)) {
try {
Settings settings = Settings.settingsBuilder()
.put("cluster.name", "myclustername").build();
TransportClient tClient = TransportClient.builder().settings(settings).build();
String[] nodes = "esnode:9300".split(COMMA);
for (String node : nodes) {
String[] hostPort = node.split(COLON);
tClient.addTransportAddress(new InetSocketTransportAddress(
InetAddress.getByName(hostPort[0]), Integer.parseInt(hostPort[1])));
}
this.client = tClient;
} catch (Exception e) {
e.printStackTrace();
}
}
return this.client;
}
此客户端代码运行但在执行以下代码时: this.getClient()。prepareGet(indexName,typeName,String.valueOf(id))。get();
抛出异常:
NoNodeAvailableException[None of the configured nodes are available: []]
at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:280)
at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:197)
at org.elasticsearch.client.transport.support.TransportProxyClient.execute(TransportProxyClient.java:55)
at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:272)
at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:347)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:85)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:59)
at org.elasticsearch.action.ActionRequestBuilder.get(ActionRequestBuilder.java:67)
我也尝试过使用IPAddress而不是主机名。如果
,上面的代码可以正常运行esnode映射到127.0.0.1
有人可以帮忙......
答案 0 :(得分:1)
在elasticsearch.yml中将elasticsearch主机ip地址设置为network.host值
network.host:es_host_ip
这解决了TransportClient NoNodeAvailableException问题。
答案 1 :(得分:0)
检查您的elasticsearch服务器是否还有2.0版,如果没有,请升级。客户端和服务器必须具有相同的版本,我不知道为什么,但这解决了我的问题。
干杯,
答案 2 :(得分:0)
其他原因可能是,您的 Elasticsearch Java客户端与 Elasticsearch服务器的版本不同。
Elasticsearch Java客户端版本只不过是代码库中的弹性搜索jar版本。
例如:在我的代码中,它是 elasticsearch-2.4.0.jar
验证Elasticsearch服务器版本,
$ / Users / kkolipaka / elasticsearch / bin / elasticsearch -version版本: 5.2.2,构建:f9d9b74 / 2017-02-24T17:26:45.835Z,JVM:1.8.0_111
如您所见,我已下载最新版本的Elastic server 5.2.2但忘记更新ES Java API客户端版本2.4.0 https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/client.html