要点: 検索インデックスは高速な読み取り用モデルであり、正のデータから再構築できなければなりません。
この記事の用語: インデックス:検索用データ構造。Reindex:インデックス全体を再構築すること。検索適合度:検索結果の適合度。
現場の課題
書き込み処理の中でインデックスを更新すると利用者を待たせ、失敗時には変更を失います。共有インデックスには越境リスクがあり、構造変更時には検索を止めずに新版へ移す仕組みが必要です。
検索インデックスは再構築可能な読み取りモデルであり、正のデータではありません。ドキュメントにテナントと元データのバージョンを持たせ、新インデックスを並行構築してエイリアスで切り替えます。
設計と実装
- 確定済み変更をOutboxまたはCDCで取得し、利用者向けトランザクション内でインデックス更新しません。
- 各ドキュメントへサーバー管理のテナントIDと元データのバージョンを持たせます。
- 新インデックスを並行構築・検証し、エイリアスを原子的に切り替えます。
実装例
create index products_v3(mapping_v3)
bulk index snapshot with sourceVersion
consume changes after snapshot watermark
compare counts, samples and query set
atomic alias products_read: v2 -> v3本番導入の進め方
既存インデックスへ永続イベントとドキュメント バージョンを追加します。代表クエリで新版を比較し、少数テナントをエイリアス経由で切り替えてから全体へ広げます。
まとめ
信頼できる検索は、再構築可能なデータ、明示したデータの新しさ、実クエリで測る検索適合度を持ちます。
