RAG・検索基盤

Qdrantとは|上位10件を取ってから条件で絞ると、87.8%を取りこぼした

条件で絞る順番で何が変わるのか探索の設定はどう効くのか別の索引の作り方と何が違うのか

上位10件を取ってから条件で絞ると、条件に合う上位10件のうち87.8%を取りこぼしました。

先に絞ってから探せば取りこぼしは0件です。比較の回数はほぼ同じでした。

この記事の要点

  • 後から絞ると87.8%を落とす
  • 上位1000件まで広げて0件
  • 先に絞れば比較はほぼ同じ
  • 枝16本・幅64で再現率33.7%

後から絞ると、条件に合う上位の87.8%を取りこぼす

2種類の索引を組み合わせられます。組み合わせないと、順番の違いがそのまま取りこぼしになります。

Qdrantは、2種類の索引を組み合わせます。公式はQdrantの重要な特徴は、ベクトルの索引と従来型の索引を効果的に組み合わせることであると述べています。

組み合わせないとどうなるのか。順番を変えて実際に探して数えました。

絞る順番を変える

text
文書 20000件。部署5種・年度7種の条件を持つ
問い 300件。条件に合う文書の中から上位 10件を取りたい

やり方                        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件です。2,634件を取りこぼしました

条件に合う文書が全体の2.9%しかないためです。上位10件の中に、条件に合うものがほとんど入りません

2つの直し方

上位1000件まで広げれば0件になります。ただし100倍の件数を取り出して捨てることになります。

先に絞る形なら、比較は20,571件でほとんど変わりません。取りこぼしも0件です。

この順番の問題は絞り込み検索の記事でも扱っていて、条件に合う割合が小さいほど深刻になります。

上位を広げるより、先に絞るほうが確実で軽い。

単位: %探してから絞る(上位10)87.8%上位10062.5%上位10000%絞ってから探す0%条件に合う文書は全体の2.9%。1問あたりの比較は20,000件と20,571件でほぼ同じ。
図1 ── やり方ごとの取りこぼし率
出典Qdrant 公式ドキュメント「Indexing」2026-08-18 確認
A key feature of Qdrant is the effective combination of vector and traditional indexes.
原文Qdrant 公式ドキュメント「Indexing」 この内容の有効期限2027-02-18

枝を16本にしても、幅が16なら再現率は10.4%

使う索引は1種類です。効き方は枝の数と探索の幅で決まり、幅のほうが強く効きます。

Qdrantが使う密なベクトルの索引は1種類です。公式はQdrantは現在、密なベクトルの索引としてHNSWだけを使うと述べています。

1種類なので、設定の効き方が要点になります。実際に組み立てて測りました。

枝の数と探索の幅を変える

text
登録 20,000件(64次元)・上位10件・問い合わせ 200回
全探索 1回あたり 5450 マイクロ秒

1点あたりの枝  探索の幅  再現率   走査件数  1回あたり  全探索比  枝の総数
         4本       16     5.7%       120件        50 μs   109.4倍   128,759本
         4本       64    16.6%       336件       141 μs    38.7倍   128,759本
         8本       16     8.9%       240件        84 μs    65.1倍   269,218本
         8本       64    22.7%       617件       226 μs    24.1倍   269,218本
        16本       16    10.4%       478件       167 μs    32.7倍   568,782本
        16本       64    33.7%     1,050件       408 μs    13.4倍   568,782本

枝を4本から16本に増やしても、幅が16なら再現率は5.7%から10.4%までです。

幅を16から64に広げると、同じ枝16本で33.7%になります。幅のほうが強く効きました。

枝は作るときの費用

枝の総数は128,759本から568,782本へ4.4倍になります。これは作るときと持っておくときの費用です。

探索の幅は、問い合わせのたびに払う費用です。払う場所が違うので、分けて決めることになります

この再現率の水準は、この計測の条件によるものです。設定の意味そのものは近似最近傍の再現率の記事で扱いました。

出典Qdrant 公式ドキュメント「Indexing」2026-08-18 確認
Qdrant currently only uses HNSW as a dense vector index.
原文Qdrant 公式ドキュメント「Indexing」 この内容の有効期限2027-02-18

組を256に分けると、1組だけ見て再現率15.8%

索引の作り方は1つではありません。分けて絞る形では、分ける数と見る数で決まります。

Qdrantが使う索引は、決まった数理の型に沿って作られます。公式はベクトルの索引とは、特定の数理の型を通じてベクトルの上に組み立てられたデータ構造であると述べています。

型が違えば効き方も違います。分けて絞る形を実際に組んで比べました。

分ける数と見る数を変える

text
登録 20,000件(64次元)・上位10件・問い合わせ 200回
全探索 1回あたり 5418 マイクロ秒

組の数  見る組  再現率   走査件数  1回あたり  全探索比
   16組      1組    86.7%     1,372件       430 μs    12.6倍
   16組      4組   100.0%     4,624件      1384 μs     3.9倍
   16組      8組   100.0%     9,638件      3149 μs     1.7倍
   16組     16組   100.0%    20,000件      7090 μs     0.8倍
   64組      1組    34.1%       319件       139 μs    38.9倍
   64組      4組    88.2%     1,261件       454 μs    11.9倍
   64組      8組   100.0%     2,484件       854 μs     6.3倍
   64組     16組   100.0%     4,897件      1823 μs     3.0倍
  256組      1組    15.8%        94件        68 μs    79.9倍
  256組      4組    46.5%       373件       159 μs    34.0倍
  256組      8組    70.6%       742件       278 μs    19.5倍
  256組     16組    96.0%     1,405件       530 μs    10.2倍

16組に分けて1組だけ見れば、再現率86.7%で12.6倍の速さです。粗く分けるほど1組が大きくなります。

256組では1組で15.8%しか取れません。16組まで見て96.0%、そのとき10.2倍でした。

同じ再現率でも速さが違う

16組で4組を見ると100.0%・3.9倍、64組で8組を見ても100.0%・6.3倍です。細かく分けたほうが速く同じ再現率に届きました。

つまり分け方は、細かいほうが有利になる範囲があります。ただし細かくすると、1組しか見ない場合の再現率は落ちます

余談 この計測での注意

3つの計測はいずれも手元で書いた模型で、実際のQdrantを動かしたものではありません。64次元・2万件という規模は実運用より小さく、再現率の水準はそのままあてはまりません。条件に合う文書の割合2.9%も置いた値です。分けて絞る形の実装も簡単なもので、実際の製品が使っている手法とは違います。ここで見せているのは、絞る順番だけで取りこぼしが変わるという点と、探索の幅のほうが枝の数より強く効くという点の2つです。

出典Qdrant 公式ドキュメント「Indexing」2026-08-18 確認
A vector index is a data structure built on vectors through a specific mathematical model.
原文Qdrant 公式ドキュメント「Indexing」 この内容の有効期限2027-02-18

よくある質問

Qdrantの特徴は何ですか
ベクトルの索引と従来型の索引を効果的に組み合わせる点だと、公式が述べています。
条件で絞るのはいつが良いですか
先に絞るほうが確実でした。後から絞ると、条件に合う上位10件の87.8%を取りこぼしました。
どんなベクトル索引を使っていますか
密なベクトルの索引としては現在HNSWだけを使うと説明されています。
探索の設定はどう効きますか
枝の数と探索の幅で決まります。枝16本・幅64で再現率33.7%、全探索の13.4倍の速さでした。

まとめ

  • 2種類の索引を組み合わせる
  • 絞る順番で取りこぼしが変わる
  • 探索の設定が再現率を決める
  • 速さと再現率は逆に動く

今日から始められること

  1. 条件で絞っている箇所の順番を確かめる
  2. 条件に合う文書の割合を数える
  3. 取りこぼしが起きていないか測る
  4. 探索の幅の設定を見る

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

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

出品の仕組みを見る