VersionConflictEngineException
がデータ損失を防ぐためにスローされます。 elasticsearch内のすべての文書には、文書が変更されるたびにインクリメントされる_version
の番号が付いています。
ESからドキュメントをクエリすると、レスポンスにはそのドキュメントのバージョンも含まれます。同じドキュメントを更新してバージョンを提供すると、同じバージョンのドキュメントがすでにインデックスに存在することが想定されます。
現在のバージョンは、私たちが今になるだろうことは、あなたの現在のシナリオでは409とVersionConflictEngineException
のHTTPエラーコードで、競合更新要求で1より大きいされている場合は、
バージョンの競合、電流2は、リクエストにいくつかの他のスレッドがalreadたことを意味する1であるのに対し、ES内の現在のバージョンは2である1
を提供しましたyがドキュメントを変更しました。あなたの変更がドキュメントを上書きしようとしています。
VersionConflictEngineExceptionの場合は、ドキュメントを再フェッチし、最新の更新バージョンで再度更新する必要があります。
versioning/Optimistic Concurrency Controlを使用するかどうかは、アプリケーションによって異なります。データを失うことなく暮らすことができれば、更新要求でバージョンを渡さないようにすることができます。
私はあなたがinsert/updateを行う直前にget by idを実行する明らかな解決策を試したと思いますか? – maximede