RAG・検索基盤

セルフクエリとは|探してから絞ったら、必要な10件のうち8.8件が消えた

セルフクエリは何をしているのか条件はいつ効かせるのか順番を間違えると何が起きるのか

問いから「経理課の2023年度」という条件を取り出しても、効かせ方を間違えると意味がありません

上位10件を取ってから条件で絞ると、必要な3000件のうち2634件が消えました

この記事の要点

  • 上位10件から絞ると87.8%取りこぼす
  • 上位1000件まで広げて0.0%
  • 絞ってから探せば0.0%
  • 条件に合うのは全体の2.9%

探してから絞ったら、必要な10件のうち8.8件が消えた

条件を後から当てると、条件に合う文書が候補に残っていません。順番で結果が変わります。

セルフクエリで取り出した条件をいつ効かせるかで、結果が大きく変わります。実際に走らせて測りました。

文書2万件に、部署5種と年度7種の条件を持たせました。1つの組み合わせに当たるのは全体の約2.9%です。

問い300件で、条件に合う文書の中から上位10件を取りたい状況にしています。取れるはずの合計は3000件です。

順番を変える

text
やり方                        1問の比較  取れた件数  取りこぼし  取りこぼし率
探してから絞る(上位10)                     20000件        366件       2634件         87.8%
探してから絞る(上位100)                    20000件       1126件       1874件         62.5%
探してから絞る(上位1000)                   20000件       3000件          0件          0.0%
絞ってから探す                           20571件       3000件          0件          0.0%

条件に合う文書は1問あたり平均 571件。全体の 2.9%

上位10件を取ってから条件で絞ると、残ったのは366件です。1問あたり1.2件しか残りません。

条件に合う文書は全体の2.9%しかありません。無作為なら上位10件に0.3件ですが、実測は1.2件でした。それでも9割近くは条件の外から埋まっています

広げれば解けるが

上位100件まで広げても取りこぼしは62.5%です。1000件まで広げて、ようやく0.0%になりました。

条件の当たる割合が2.9%なので、10件を確保するには350件前後が要ります。条件が細かくなるほど、広げる幅も増えます

出典もこの必要性を対象の特徴をすべて埋め込みで表すことができない場合、追加の条件を設けることが重要になると述べています。

条件を後から当てると、候補にほとんど残っていない。

単位: %上位10件から絞る87.8%上位100件から絞る62.5%上位1000件から絞る0%絞ってから探す0%文書2万件・問い300件での実測。条件に合う文書は1問あたり平均571件だった。
図1 ── 絞る順番ごとの取りこぼし率
出典Qdrant「Filtering」2026-08-18 確認
Setting additional conditions is important when it is impossible to express all the features of the object in the embedding.
原文Qdrant「Filtering」 この内容の有効期限2027-02-18

セルフクエリは何をしているのか

問いの文から、絞り込みの条件と探すための語を分けます。分けた条件を検索側へ渡します。

セルフクエリは、利用者の問いから条件を取り出す仕組みです。取り出した条件は、検索の絞り込みに渡します。

問いを2つに割る

「経理課が2023年度に出した出張の規程」という問いなら、条件は部署と年度、探す語は出張の規程です。

条件のほうを埋め込みに混ぜると、うまく効きません。年度のような値は、近さでは表せないからです。

出典も検索側の受け口を点を検索または取得するときに条件を設定できると説明しています。条件は別の口から渡します。

文書側の用意

  1. 項目を決める。部署・年度・種別など
  2. 値をそろえる。表記のゆれを消しておく
  3. 全件に付ける。欠けていると条件で落ちる
  4. 取り出す語を対応させる。問いの言い方と項目の値をつなぐ

3番目を落とすと、条件を付けた瞬間に項目のない文書が全部消えます。付けられない文書の扱いを先に決めます。

取り出せなかったとき

問いに条件が含まれていない場合もあります。そのときは条件なしで探すのが素直な動きです。

困るのは、間違った条件を取り出した場合です。条件に合う文書が0件になり、結果が空になります。取り出した条件は記録に残します。

出典Qdrant「Filtering」2026-08-18 確認
With Qdrant, you can set conditions when searching or retrieving points.
原文Qdrant「Filtering」 この内容の有効期限2027-02-18

絞ってから探しても、比較件数はほとんど増えない

条件の照合は軽い処理です。索引を張っておけば、先に絞るほうが速くなります。

セルフクエリで先に絞ると遅くなる、という心配をよく聞きます。この計測では増えていません

絞ってから探した場合の比較は1問あたり20571件でした。全件を探す20000件と比べて2.9%の増です。

増えたぶんは、条件に合った571件のベクトル比較です。条件の照合そのものは、ベクトルの比較より軽い処理です。

索引を張る

軽いと言えるのは、条件の列に索引が張ってある場合です。出典も絞り込みの性能を出すには、絞り込みに使う予定の項目に索引を作ることを挙げています。

索引がないと、条件の照合が全件走査になります。2万件なら気になりませんが、桁が増えると効いてきます

絞りすぎに注意する

条件が細かいほど、残る母数が小さくなります。この計測では平均571件でしたが、条件を1つ足すごとに割り算されます

残りが10件を切ると、上位10件を取ること自体ができません。絞ったあとの件数を記録しておくと、この状態に気づけます。

索引を分けている場合は、さらに減ります。ベクタシャーディングの記事では、分けたときの再現率を測っています。

条件は先に効かせる。照合の費用は小さい。

充足 2 / 4条件を探す前に効かせている上位10件を取ってから絞ると、必要な3000件のうち2634件が消える条件の項目に索引を張っている索引がないと条件の照合が全件走査になり、件数の桁で効いてくる上位を広く取って後から絞っている条件の当たる割合が2.9%なら、1000件まで広げないと0件にならない絞ったあとの件数を見ていない残りが10件を切ると、上位10件を取ること自体ができない文書2万件・問い300件での実測にもとづく。条件に合う文書は平均571件だった。
図2 ── 組む前の点検項目
余談 この計測での注意

条件は部署と年度を一様に割り振ったものです。実際の文書は特定の部署や年度に偏るので、条件に合う割合はもっと大きくも小さくもなります。比較件数も、条件の照合を1件1回として数えた単純な形です。ここで見せているのは、条件の当たる割合が小さいほど、後から絞る方式が成り立たなくなるという関係です。

出典Qdrant「Filtering」2026-08-18 確認
For performant filtering, create payload indexes for the fields you plan to filter on.
原文Qdrant「Filtering」 この内容の有効期限2027-02-18

よくある質問

条件は検索のあとで絞れば足りますか
足りません。この計測では上位10件を取ってから絞ると、必要な3000件のうち366件しか残りませんでした。
先に広く取れば解決しますか
解決しますが件数が要ります。この計測では上位1000件まで広げて、ようやく取りこぼしが0件になりました。
絞ってから探すと遅くなりませんか
この計測では1問あたりの比較が20571件で、全件を探す20000件とほぼ同じでした。条件の照合が軽いためです。
条件を取り出せなかった場合はどうしますか
条件なしで探すことになります。取り出せたかどうかを記録して、外れた問いを後から見直せるようにします。

まとめ

  • 問いから条件を取り出す
  • 条件は探す前に効かせる
  • あとで絞ると大半が消える
  • 条件の列には索引を張る

今日から始められること

  1. 問いの中で条件になっている語を書き出す
  2. その語が文書側の項目と対応しているか確かめる
  3. 条件を先に効かせる呼び方に変える
  4. 条件で絞ったあとの件数を記録する

実務で組んだセルフクエリのワークフローには、値段が付きます

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

出品の仕組みを見る