【问题标题】:No Node Available Exception in Elastic Search弹性搜索中没有可用节点异常
【发布时间】:2018-01-21 13:06:56
【问题描述】:

我对弹性搜索概念非常陌生。我正在尝试使用弹性搜索构建一个简单的应用程序。

public class App 
{
public static void main( String[] args )
{
    try {
        TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));

        ElasticOperations.addDocToIndex(client, ElasticUtility.getJsonMap("Sandesha", "male", "jsandesh08@gmail.com", "Hassan"));
        System.out.println("Doc added");
        client.close();
    } catch (UnknownHostException e) {

        e.printStackTrace();
    }

}
}

但是,当我试图运行这个程序时,我得到了NoNodeAvailableException

线程“主”NoNodeAvailableException [没有配置的节点可用:[{#transport#-1}{w1bSLAN-TFWUHE1PA3qDeQ}{localhost}{127.0.0.1:9300}]] 在 org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:347) 在 org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:245) 在 org.elasticsearch.client.transport.TransportProxyClient.execute(TransportProxyClient.java:59) 在 org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:363) 在 org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:408) 在 org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:80) 在 org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:54) 在 com.sandesha.elasticsearch.Elastic.ElasticOperations.addDocToIndex(ElasticOperations.java:11) 在 com.sandesha.elasticsearch.Elastic.App.main(App.java:27)

请帮我解决这个问题。 我的ElasticOperations 班级是,

public class ElasticOperations {

public static void addDocToIndex(TransportClient client, Map<String,Object> jsonMap)
{
    client.prepareIndex("customers", "personal").setSource(jsonMap).execute().actionGet();
}

}

我的ElasticUtility 类看起来像,

public class ElasticUtility {

public static Map<String, Object> getJsonMap(String name, String gender, String email, String city)
{
    Map<String,Object> jsonMap = new HashMap<String, Object>();
    jsonMap.put("name", name);
    jsonMap.put("gender", gender);
    jsonMap.put("email", email);
    jsonMap.put("city", city);

    return jsonMap;
}
}

谢谢。

【问题讨论】:

  • 你能从终端或使用感觉连接到弹性吗?
  • 我可以通过终端连接。它运行在端口 9200

标签: java spring elasticsearch


【解决方案1】:

我认为您的集群名称不匹配。如果您的集群名称不是“elasticsearch”,则可能是问题所在。

在浏览器中转到 http://localhost:9200 并获取您的集群名称。然后,尝试将集群名称属性添加到 TransportClient,如下所示:

Settings settings = Settings.builder()
                            .put("cluster.name", "elasticsearch_foo").build();
TransportClient client = new PreBuiltTransportClient(settings)
                         .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));

【讨论】:

  • 太棒了,谢谢。另请注意,您可以发出 get /nodes 调用来找出集群名称
猜你喜欢
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多