我在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会 是一个更好的选择。
另一方面,如果你只需要一些长寿,持久的话 连接对象到集群,节点客户端可以多一点 高效,因为它知道群集布局。但它与你联系在一起 应用程序进入群集,因此它可能会导致防火墙出现问题 透视图。
如何修复错误?感谢。
答案 0 :(得分:1)
显然我应该在9300端口运行它,而不是9200:
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getLocalHost(), 9300))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getLocalHost(), 9300)))