【发布时间】:2015-11-13 11:35:54
【问题描述】:
尝试使用 ES 2 的 Java API 连接到 Elasticsearch 2 时出现以下错误。代码如下:
Settings settings = Settings.settingsBuilder().put("cluster.name", Receptor.clusterName).build();
TransportClient transportClient = TransportClient.builder().settings(settings).build();
Client c = null;
try {
c = transportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(Receptor.es_ip), 9300));
} catch (UnknownHostException e) {
System.err.println(Util.getTimestampStr() + "UnknownHostException error.");
e.printStackTrace();
}
CreateIndexRequestBuilder createIndexRequestBuilder = c.admin().indices().prepareCreate(indexName);
createIndexRequestBuilder.addMapping(documentName, json);
createIndexRequestBuilder.execute().actionGet();
我能够在 transportClient.connectedNodes() 上获取我的 ES 节点,但是当我尝试添加新映射时,我得到 NoNodeAvailableException 异常。此代码适用于以前版本的 Elasticsearch。知道出了什么问题吗?
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.client.support.AbstractClient$IndicesAdmin.execute(AbstractClient.java:1177)
at
org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:85)
at
org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:59)
【问题讨论】:
-
如果您在尝试访问的集群中配置节点,例如in this post,您是否看到任何改进?另外,我很想知道您使用什么 IP 连接到节点,相对于 ES 节点报告在启动时绑定的 IP(类似于启动时日志中的
[INFO ][transport ] [main_node_2_0] publ ish_address {127.0.0.1:9300}, bound_addresses {127.0.0.1:9300}, {[::1]:9300})。跨度> -
你玩过
elasticsearch.yml文件中的配置吗?minimum_master_nodes有什么东西吗? -
您正在尝试将在主机[
Receptor.es_ip] 中运行的外部elasticsearch 客户端与端口9300通信,请确保elasticsearch 是否正在运行 -
我在与 Elasticseearch 节点相同的主机上运行 Java 程序。我正在运行与以前版本的 ES (1.7.2) 相同的 Java 程序,没有问题。我有一个运行良好的 python 脚本,但我的 Java 程序没有。 ES 当然在运行。
-
@AndreiStefan 解决了我的问题,解决方案在他链接的帖子中。
标签: java elasticsearch