ElasticSearch 2.0传输客户端 - 无节点可用异常

时间:2015-11-04 12:57:57

标签: java elasticsearch

[使用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

有人可以帮忙......

3 个答案:

答案 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