1. ホーム
  2. elasticsearch

[解決済み] Elasticsearchは、複数のドキュメントを含むトランザクションをサポートする方法

2022-02-10 03:18:59

質問内容

elasticsearchを使用していて、データを非正規化する場合。

PUT /my_index/user/1
{
"name": "John Smith",
"email": "[email protected]",
"dob": "1970/10/24"
}

PUT /my_index/blogpost/2
{
"title": "Relationships",
"body": "It's complicated...",
"user": {
"id": 1,
"name": "John Smith"
}
}

しかし、問題は、ElasticsearchがACIDトランザクションをサポートしていないことです。もし私が/my_index/user/1と/my_index/blogpost/2のユーザー名を一度に変更したい場合、一つのエラーが発生するとロールバックされることになりますが、どのようにすればよいのでしょうか?

解決方法は?

内部情報筋によると、ESの取引はなく、今後もないそうです。

欲しいものを実現するための最良の方法は、あなたの 一括更新 を実行し、個々のレスポンスを確認します。

POST _bulk
{"index": {"_index": "my_index", "_type": "user", "_id": "1"}}
{ "name": "John Smith", "email": "[email protected]", "dob": "1970/10/24" }
{"index": {"_index": "my_index", "_type": "blogpost", "_id": "2"}}
{ "title": "Relationships", "body": "It's complicated...", "user": { "id": 1, "name": "John Smith" }}

クライアントがレスポンスを取得する際に items 配列の各項目が status が 200 (更新) または 201 (作成) であることを確認します。そうでない場合は、ステータス200または201のものはすべてコミットされ、それ以外のものはコミットに失敗しています。