我正在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)))