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



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

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将是一个更好的选择。

另一方面,如果你只需要几个长期、持久的连接到集群的对象,节点客户端可能会多一点高效,因为它知道集群布局。但它把你的应用程序进入集群,因此它可能会从防火墙引发问题态度

如何修复错误??谢谢

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

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

最新更新