RAG・検索基盤

同期パイプラインとは|更新が2割を超えたら、差分より作り直しのほうが速かった

同期パイプラインは差分と作り直しのどちらにするのか切り替える点はどこか反映が遅れると何が起きるのか

50万件の索引を全部作り直すと4.2分でした。差分だけ入れるなら5000件で0.2分です。

ところが更新が10万件を超えると差分のほうが遅くなります。全体の20%が分かれ目でした。

この記事の要点

  • 作り直しは4.2分で一定
  • 差分は更新件数に比例
  • 分かれ目は全体の20%
  • 反映6時間で13.88%に古い内容

更新が2割を超えたら、差分より作り直しのほうが速かった

差分投入は更新件数に比例します。作り直しは件数によらず一定なので、どこかで入れ替わります。

同期パイプラインでまず決めるのが、差分だけ入れるか、全部作り直すかです。実際に計算して、分かれ目を出しました。

索引の総件数を50万件としました。作り直しは毎秒2000件、差分の投入は毎秒400件です。

差分のほうが1件あたり遅いのは、既にあるかどうかを確かめてから書き換えるためです。

更新件数を動かす

text
索引の総件数 500000件。全部作り直すと 4.2分かかる
作り直しは毎秒 2000件、差分の投入は毎秒 400件として計算した

1日の更新件数  全体に対する割合  全部作り直す  差分だけ入れる  速いのは
500件                     0.1%          4.2分            0.0分          差分
5000件                    1.0%          4.2分            0.2分          差分
50000件                  10.0%          4.2分            2.1分          差分
100000件                 20.0%          4.2分            4.2分        作り直し
200000件                 40.0%          4.2分            8.3分        作り直し

入れ替わる点は 100000件。全体の 20.0% を超えると作り直したほうが速い。

1日の更新が5000件なら、差分は0.2分です。作り直しの4.2分と比べて20分の1で済みます。

20万件になると差分は8.3分で、作り直しの倍かかります。1件あたりが遅いぶんが効いてきます

分かれ目の求め方

計算は簡単です。作り直しの所要(秒)に、差分投入の毎秒件数を掛けるだけです。

この計測なら250秒×400件で10万件になります。総件数の20.0%です。

出典も反映の単位を更新は、前回の更新以降に索引へ行われたすべての操作を検索できるようにすると説明しています。まとめて反映する形は同じです。

差分は件数に比例し、作り直しは一定。どこかで入れ替わる。

単位: 分200000件(差分)8.3分100000件(差分)4.2分50000件(差分)2.1分5000件(差分)0.2分総件数50万件での計算。全部作り直す場合はどの行でも4.2分で一定。
図1 ── 更新件数ごとの所要
出典Elastic「Near real-time search」2026-08-18 確認
A refresh makes all operations performed on an index since the last refresh available for search.
原文Elastic「Near real-time search」 この内容の有効期限2027-02-18

反映を6時間ごとにすると、13.88%の問いに古い内容が混ざる

未反映の件数は少なくても、更新された文書ほど引かれやすいので結果に出ます。

同期パイプラインの遅れは、件数で見ると小さく見えます。検索結果で見ると印象が変わります。

総件数50万件、1日の更新5000件で計算しました。更新された文書はそうでない文書より6倍引かれやすいものとしています。

反映の間隔を動かす

text
反映の間隔  未反映の件数  上位10件に古い内容が混ざる問いの割合
5分                   17件                                 0.25%
60分                 208件                                 2.38%
360分               1250件                                13.88%
1440分              5000件                                44.92%

6時間ごとの反映なら、未反映は1250件です。総件数50万件の0.25%にすぎません。

ところが上位10件に古い内容が混ざる問いは13.88%です。件数の割合の50倍以上あります。

なぜ膨らむのか

理由は2つあります。1つは更新された文書ほど引かれやすいこと。話題が新しいほど問いに当たります。

もう1つは上位10件を見ていることです。1件あたりの確率が小さくても、10回引けばどれかが当たります

1日1回の反映では44.92%まで上がります。2回に1回近く、古い内容が混ざる状態です。

出典もこの性質をだからこそ近実時間の検索と呼ぶ。文書の変更は検索へ即座には見えないが、この時間内には見えるようになると説明しています。

未反映の件数は小さくても、結果には大きく出る。

単位: %1440分ごと44.92%360分ごと13.88%60分ごと2.38%5分ごと0.25%総件数50万件・1日の更新5000件での計算。未反映は順に17件・208件・1250件・5000件。
図2 ── 反映の間隔と古い内容が混ざる割合
出典Elastic「Near real-time search」2026-08-18 確認
This is why we say that Elasticsearch has near real-time search: document changes are not visible to search immediately, but will become visible within this timeframe.
原文Elastic「Near real-time search」 この内容の有効期限2027-02-18

差分として何を拾うかを決めておく

更新だけを見ていると、削除と移動が残ります。作り直しなら消えるものが、差分では残ります。

同期パイプラインを差分で回すなら、何を変更として拾うかを決めます。拾い漏れは索引に残り続けます。

拾う変更の種類

  1. 追加。新しい文書が増えた
  2. 更新。中身が書き換わった
  3. 削除。元の文書がなくなった
  4. 移動。場所や権限が変わった

3番目を落とすと、消したはずの文書が検索に出続けます。作り直しなら自然に消えるので、差分に切り替えたときに露見します。

4番目も同じです。見せてよい相手が変わったのに索引が古いままだと、権限のない人に出ます

変わったかどうかの見分け方

  1. 更新日時。取りやすいが、更新されていなくても動く場合がある
  2. 中身の要約値。本当に変わった場合だけ拾える
  3. 版番号。元のシステムが持っていれば最も確実
  4. 変更の記録。削除も拾えるが、元側の対応が要る

2番目を使うと、形だけ触られた文書を弾けます。埋め込みの作り直しは重いので、ここで減らせると効きます。取り込みの前段はドキュメントローダの記事で扱っています。

いつ反映するか

反映を細かくすると、そのぶん処理が走ります。出典は既定の動きを既定では1秒ごとに索引を更新するが、直近30秒に1件以上の検索要求を受けた索引に限ると説明しています。

使われていない索引は更新しない、という考え方です。更新の頻度は、検索の頻度に合わせます

削除を拾わないと、差分に切り替えた瞬間に残り始める。

充足 2 / 4削除も変更として拾っている作り直しでは消えるが、差分では消したはずの文書が残り続ける更新の割合から方式を選んでいる全体の20%を超えると、差分より作り直しのほうが速い更新日時だけで変更を判定している中身が変わっていなくても動くことがあり、埋め込みを無駄に作り直す未反映の件数だけを見ている1250件でも、上位10件に古い内容が混ざる問いは13.88%になる総件数50万件・1日の更新5000件での計算にもとづく。
図3 ── 差分で回す前の点検項目
余談 この計測での注意

毎秒2000件・毎秒400件という速さは置いた値です。実際の速さは埋め込みの計算を含むかどうかで桁が変わります。更新された文書が6倍引かれやすいという置き方も、業務によって大きく違います。ここで見せているのは、差分と作り直しに分かれ目があることと、未反映の件数より結果への出方のほうが大きいという関係です。

出典Elastic「Near real-time search」2026-08-18 確認
By default, Elasticsearch periodically refreshes indices every second, but only on indices that have received one search request or more in the last 30 seconds.
原文Elastic「Near real-time search」 この内容の有効期限2027-02-18

よくある質問

差分投入と作り直しはどちらがよいですか
更新の割合で決まります。この計測では全体の20%を超えると、作り直しのほうが速くなりました。
分かれ目はどう計算しますか
作り直しの所要に、差分投入の毎秒件数を掛けます。この計測では4.2分×毎秒400件で10万件でした。
反映は遅れても問題ありませんか
更新された文書ほど引かれやすいので効きます。この計測では6時間ごとの反映で、13.88%の問いに古い内容が混ざりました。
削除はどう扱いますか
差分投入では明示的に消す必要があります。作り直しなら消えますが、差分では残り続けます。

まとめ

  • 元データの変更を索引へ反映する
  • 差分は更新件数に比例
  • 作り直しは件数によらず一定
  • 遅れは更新された文書ほど響く

今日から始められること

  1. 1日の更新件数を実測する
  2. 作り直しにかかる時間を測る
  3. 差分投入の毎秒件数を測る
  4. その2つから切り替える点を計算する

実務で組んだ同期パイプラインのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る