我是 Elastic Search 的新手。我的代码中有以下内容,或者在以下情况下寻找“无节点可用异常”问题的解决方案。
-
1) 我们让 ES 在具有 1 个节点和 1 个集群的系统上运行。
2)我们在 ES 上有 4 个索引。 (每个索引都有不同类型的数据,示例:客户 偏好/客户地址/客户兴趣/客户基本资料)
3) 我们有在 Tomcat 上运行的 WebApplication(作为 Web 服务)。 4) 我们正在调用 webservice 方法作为 Controller 的方法。 -这将收到来自的请求 JSON 数据形式的消费者。
5)基于该数据(例如:如果消费者要求提供给定的客户偏好 客户 ID 然后我们转到“客户偏好”索引)我们将去服务(使用 春)层。
6) 在每个服务层中,我们在 SingleTon 对象中获取 TransportClient 实例,并且 等待其响应并将结果返回给Controller。
在一个场景中,如果消费者要求为客户提供所有 4 种类型的数据,并且我们是否首先依次询问偏好、地址、兴趣和基本详细信息。它运作良好。但这增加了性能。所以我们希望这些东西能够并行处理并获取数据。
所以我们使用 Spring Task Executors 来并行执行此操作。在那种情况下,我们从一个索引获取数据,而其他索引将得到“无节点可用异常”。说出我们遇到这个问题的数据是很随意的。
请在这里帮助我。
提前致谢!....
最佳答案
当我试图从多个 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();
关于java - 使用 ElasticSearch 的 TrasnsportClient 获取 'No Node Available Exception',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23739137/