嵌入JVM的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地狱"。将其设置为现有的空文件夹现在可以工作问题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关闭吗

我在弹性搜索中看到了关闭和关闭节点之间的区别?但这似乎适用于版本1,在我的API中没有这样的方法。

索引数据后,我等待

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

以确保它被正确地索引和可用。在集成测试弹性搜索、时间问题、找不到文件时提到了这一点


JVM关闭后,使用带索引的嵌入式数据存储重新启动,ES无法立即进行查询。我得到其中一个错误:

ClusterBlockException[阻止者:[SERVICE_NAVAILABLE/1/state not已恢复/初始化];]

执行阶段[query_fetch]失败,所有碎片失败

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

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

问题3:如何以编程方式等待ES准备好提供请求

请参阅Andrei Stefan:的评论

在运行搜索之前,请尝试node.client().admin().cluster().prepareHealth().setWaitForGreenStatus() .execute().actionGet();

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

最新更新