1
我使用的是0.9版,我有這種很幼稚的方法來更新文件,基本上做了比較和交換:
(僅適用於相關的代碼所示)爲什麼我的幼稚Elasticsearch更新頻繁出現文檔版本衝突?
for (int i = 0; i < MAX_RETRY; i++) {
GetResponse get = client.prepareGet().execute().actionGet();
// Assume document already exists
try {
client
.prepareIndex()
.setId(id)
.setSource(newDoc)
.setVersion(get.getVersion())
.execute()
.actionGet();
// Successfully updated
} catch (VersionConflictEngineException e) {
continue; //retry
}
throw UpdateFailedException();
}
代碼適用於大多數的更新,但也比我預期的版本衝突更頻繁地失敗。奇怪的是,它似乎總是失敗時,服務器文檔是預期版本的+1。有什麼明顯的我失蹤了?
我知道Elasticsearch有一個適當的更新功能,但我不能使用這臺ATM。