version conflict engine exception

How to solve type=version_conflict_engine_exception

這篇介紹為什麼會發生type=version_conflict_engine_exception並提出解決方法。

發生情境

1
2
3
4
當兩個Process對同一個index、_id進行update時,就會有先後順序的Conflict問題發生。
因update先後順序不重要,且確保兩句update都要執行時,可以設定retry_on_conflict參數來達到重試。

retry_on_conflict default 為 0

KQL example

1
2
3
4
5
6
7
POST /website/pageviews/1/_update?retry_on_conflict=5 
{
"script" : "ctx._source.views+=1",
"upsert": {
"views": 0
}
}

REST API example

1
2
UpdateRequest request = new UpdateRequest(indexName, documentId).doc(params);
request.retryOnConflict(5);