获得“没有节点可用的例外”#39;使用ElasticSearch的TrasnsportClient时

时间:2014-05-19 13:30:56

标签: java elasticsearch client native transport

我是Elastic Search的新手。我在我的代码中有以下内容或正在寻找“无节点可用异常”的解决方案'以下情况中的问题。

    1)我们在具有1个节点和1个集群的系统上运行ES。
    2)ES上有4个索引。 (每个索引都有不同类型的数据,例如:客户    偏好/客户地址/客户利益/客户基本详情)
    3)我们在Tomcat上运行WebApplication(作为webservice)。 4)我们将webservice方法称为Controller' s。 - 这将收到来自的请求    消费者采用JSON数据的形式 5)基于该数据(例如:如果消费者要求给出客户偏好    客户ID然后我们转到'客户偏好' index)我们将去服务(使用    春天)层。
    6)在每个服务层中,我们在SingleTon对象中获取TransportClient实例    等待其响应并将结果返回给Controller。

    在情景中,如果消费者要求客户提供所有4种类型的数据,并且我们首先按顺序询问首选项,地址,兴趣和基本详细信息。它运作良好。但这增加了性能。所以我们希望处理这些事情并使数据并行。

    所以我们使用Spring Task Executors来并行执行此操作。在这种情况下,我们从一个索引获取数据,而其他人将获得“无节点可用例外”#39;它非常随意地说明了我们得到这个问题的数据。

    请帮助我。

    提前致谢!....

1 个答案:

答案 0 :(得分:1)

当尝试将数据从多个Web应用程序写入同一ES节点时,我遇到了类似的问题。我通过为每个节点创建单独的节点来修复它。

我建议您尝试ES的这些设置

client.transport.sniff=true
sniffOnConnectionFault=true

您还可以在一个查询中获取4个索引的数据。 对于客户偏好/客户地址/客户利益/客户基本详细信息。

示例代码:

SearchRequestBuilder srb = client
.prepareSearch("preference_index", "address_index", "interests_index", "details_index")
.setTypes("preference_doc", "address_doc", "interests_doc", "details_doc")
.setSearchType(SearchType.DEFAULT);

QueryBuilder boolBuilder = QueryBuilders.boolQuery().should(
QueryBuilders.matchQuery("id_customer", "14"));

SearchResponse response = srb.setSize(4).execute().actionGet();
SearchHit[] docs = response.getHits().getHits();