java - JVM 中嵌入的 ElasticSearch : wait until ready

标签 java elasticsearch

在版本 2 中运行嵌入式 ES 的正确方法是什么?我正在玩2.3.4版本,遇到了一些麻烦,感觉很脆弱。

此博客http://geekabyte.blogspot.ro/2015/08/embedding-elasticsearch-in-spring.html这主要适用于版本 1。配置现在看起来像这样:

Settings.Builder settingsBuilder = Settings.builder();
settingsBuilder.put("node.name", "embedded-node");
settingsBuilder.put("path.home", "/existing/dummy/path/");
settingsBuilder.put("path.data", "/path/where/my/data/will/be/stored/");
settingsBuilder.put("http.enabled", false);

新的是“path.home”的要求。我不明白为什么,它是嵌入的。我见过有人将其设置为 ES 安装基础文件夹,但随后它会抛出“Jar hell”。现在将其设置为现有的空文件夹即可。 问题1:有更好的方法吗?

我从网上复制粘贴的其他配置选项是:

settingsBuilder.put("client.transport.sniff", false);
settingsBuilder.put("index.number_of_replicas", 0);
settingsBuilder.put("index.number_of_shards", 1);
settingsBuilder.put("action.write_consistency", "one");

最后是创建节点的代码:

NodeBuilder.nodeBuilder()
            .settings(settings)
            .clusterName("embedded-cluster")
            .data(true).local(true).node();
<小时/>

问题 2:我需要明确告诉 ES 关闭吗?

我见过Difference between close and shutdown a node in elasticsearch?但这似乎是针对版本1的,在我的API中没有这样的方法。

索引数据后,我等待

this.node.client().admin().indices().refresh(new RefreshRequest(indexName)).actionGet();

以确保它已正确索引并可用。 Integration test elastic search, timing issue, document not found 上提到过

<小时/>

JVM 关闭并使用索引嵌入式数据存储重新启动后,ES 无法立即用于查询。我收到以下错误之一:

ClusterBlockException[blocked by: [SERVICE_UNAVAILABLE/1/state not recovered / initialized];]

Failed to execute phase [query_fetch], all shards failed

我当前的解决方案是在启动节点和查询节点之间等待 3 秒:

NodeBuilder.nodeBuilder()...node();
Thread.sleep(3000);
node.client().prepareSearch()...

问题 3:如何以编程方式等待 ES 准备好处理请求?

最佳答案

参见安德烈·斯特凡的评论:

Before running your search try node.client().admin().cluster().prepareHealth().setWaitForGreenStatus() .execute().actionGet();

在较新的 Elasticsearch 版本中,尤其是从版本 6 开始,嵌入式 ES 模式不再起作用。对于自动化测试设置,这对我有用:https://github.com/allegro/embedded-elasticsearch

关于java - JVM 中嵌入的 ElasticSearch : wait until ready,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38733009/

相关文章:

java写入现有的xml

java - JHipster Spring 启动失败,出现 Logback 配置错误

java - 了解序列化代理

elasticsearch - 使用动态字段名称搜索ElasticSearch

java - elasticsearch中执行From/Size时的范围

elasticsearch - 在带有Should子句的Elasticsearch中使用SearchTemplate进行日期范围查询

java - 从JAVA连接MongoDB的问题

Elasticsearch - 2个字段的乘法然后求和聚合

database - 如何 “join” 2索引并在ElasticSearch中搜索?

java - EXACTLY HH :MM:SS time String 的正则表达式模式