2016-11-15 53 views
0

我正试图解决在我们的生产中与Elasticsearch有关的问题,这是不可重复的。我正在使用Elasticsearch 1.5(尚未升级)。elasticsearch何时试图恢复其索引?

的问题是,试图创建一个索引我得到异常IndexAlreadyExistsException一个错误,因为调用

client.admin().indices().prepareExists(index).get().isExists(); 

返回false作为Elasticsearch处于恢复模式,然后当我试图创建一个索引我得到的例外。

下面是几个指出Elasticsearch在恢复索引时返回false的问题的链接。

8945 8105

由于我无法重现该问题总是我不能测试我的修复是首先检查isExists前检查健康()。

我的问题是Elasticsearch何时开始恢复?

回答

0

可以使用prepareHealth()管理方法,以等待集群做你的索引维护操作之前达到一个给定的状态:

ClusterHealthResponse health = client.admin().cluster().prepareHealth(index) 
    .setWaitForGreenStatus()      
    .get(); 

或者你也可以等待整个集群获得绿色:

ClusterHealthResponse health = client.admin().cluster().prepareHealth() 
    .setWaitForGreenStatus()      
    .get(); 
+0

是的,我可以这样做,但这是解决方案。我期待的是弹性搜索何时尝试恢复的答案?到目前为止,这个问题在生产中的重现性也只有几次。我想在本地重现它。现在要在本地重现它,我需要Elasticsearch进入恢复模式,但对于本地安装,一切正常。 – Pratz

+1

然后,您可以使用'RecoveryResponse recoveryResponse = client().admin().index()。prepareRecoveries(index).get();'如果您想人工触发索引的恢复。 – Val

+0

你能够做你想做的事吗? – Val