在版本2中运行嵌入式ES的正确方法是什么?我正在玩2.3.4版,我遇到了一些麻烦,感觉很脆弱。
此版本1的博客http://geekabyte.blogspot.ro/2015/08/embedding-elasticsearch-in-spring.html主要适用。配置现在看起来像这样:
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 [阻止:[SERVICE_UNAVAILABLE / 1 / state not 恢复/初始化];]
或
执行阶段[query_fetch]失败,所有分片都失败
我目前的解决方案是在启动节点和查询节点之间等待3秒钟:
NodeBuilder.nodeBuilder()...node();
Thread.sleep(3000);
node.client().prepareSearch()...
问题3 :如何以编程方式等待ES准备好处理请求?
答案 0 :(得分:1)
见Andrei Stefan的评论:
在运行搜索之前尝试一下
node.client().admin().cluster().prepareHealth().setWaitForGreenStatus() .execute().actionGet();
在较新的Elasticsearch版本中,特别是从版本6开始,嵌入式ES模式不再起作用。对于自动化测试设置,这对我有用:https://github.com/allegro/embedded-elasticsearch