2016-11-15 50 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