尝试为Elasticsearch创建传输客户端时出现NoNode错误

时间:2015-12-13 16:46:43

标签: java elasticsearch

我在localhost:9200上运行Elasticsearch 2.1.0。我需要做的是从使用Java for ES的索引中读取,而不必创建节点,因为我关心应用程序的速度。以下是我的代码:

try (Client client = TransportClient.builder().build()
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getLocalHost(), 9200))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getLocalHost(), 9200))) {
            QueryBuilder qb = matchQuery(
                    ...
            );  
            CountResponse response;
            response = client.prepareCount(indexName)
                    .setTypes(spammerType).setQuery(qb)
                    .execute()
                    .actionGet();
        }

但是,我收到以下错误:

Exception in thread "main" NoNodeAvailableException[None of the configured nodes are available: [{#transport#-1}{127.0.0.1}{localhost/127.0.0.1:9200}]]

但是我试图避免创建节点,因为正如我之前提到的,我需要我的应用程序尽可能快地从索引中读取。根据ES:

  

两个客户都有用例:

     

如果您想要解耦应用程序,传输客户端是理想的选择   来自群集。例如,如果您的应用程序快速创建和   破坏与集群的连接,运输客户端很多   比节点客户端“更轻”,因为它不是集群的一部分。

     

同样,如果您需要创建数千个连接,则不需要   希望有数千个节点客户端加入群集。 TC会   是一个更好的选择。

     

另一方面,如果你只需要一些长寿,持久的话   连接对象到集群,节点客户端可以多一点   高效,因为它知道群集布局。但它与你联系在一起   应用程序进入群集,因此它可能会导致防火墙出现问题   透视图。

如何修复错误?感谢。

1 个答案:

答案 0 :(得分:1)

显然我应该在9300端口运行它,而不是9200:

.addTransportAddress(new InetSocketTransportAddress(InetAddress.getLocalHost(), 9300))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getLocalHost(), 9300)))