本文へ移動

S3 Vectors のフィルタ検索が事前評価に、既存インデックスは UpdateIndexMode で切替

S3 Vectors はメタデータフィルタを類似度検索前に評価する。新規バケットでは既定で有効。既存インデックスはクエリ単位で比較し、UpdateIndexMode で切り替える。RAG の絞り込み検索を使う開発者向け。

最大5倍 絞り込みの強いフィルタで返る一致ベクトルの数 AWS の告知(2026年9月30日)。同じ検索で pre-filtering と現行のフィルタリングを比べた値で、フィルタが selective なときの上限

フィルタ付きで QueryVectors を投げても、条件に合うはずのベクトルが思ったほど返ってこない。S3 Vectors で RAG やセマンティック検索を組んでいるなら、この症状に心当たりがあるかもしれない。AWS は2026年9月30日、メタデータフィルタを類似度検索より先に評価する pre-filtering を S3 Vectors に入れたと告知した。新しい vector bucket のインデックスでは既定で有効になる。既存のインデックスは UpdateIndexMode API でその場で切り替える。

告知によると、絞り込みの強いフィルタ(告知の表現では selective)を使うと、pre-filtering では条件に合うベクトルが最大5倍多く返る。比べているのは、同じ条件で検索したときの pre-filtering と現行のフィルタリングだ。追加料金はかからず、切り替える前に同じインデックスで両方を比べられる。

絞り込みが強いクエリほど差が開く

告知は pre-filtering を「類似度検索を実行する前にメタデータフィルタを評価する」方式だと説明している。最大5倍という数字には「フィルタが selective なとき」という条件が付いている。どのフィルタでも5倍になるとは書かれていない。条件が緩いクエリでどの程度の差が出るのか、告知に数字はない。

従来方式の仕組みは告知では説明されていない。ただ「フィルタを使ったときに、より完全な結果を返す」という書き方からは、これまでのフィルタ付き検索では条件に合うベクトルの一部が結果から漏れる場合があったと読める。これは告知の文面からの推測だ。そうだとすれば、テナントや文書種別で細かく絞る RAG ほど、LLM に渡る文脈が薄くなっていた可能性がある。

新規バケットと既存インデックスで手順が分かれる

新しい vector bucket は書き込みも検索もそのまま

新しい vector bucket に作るインデックスは、既定で pre-filtering を使う。PutVectors でのベクトルの書き込みも、QueryVectors でのフィルタ付き検索も、書き方は変わらないと告知は明記している。これから S3 Vectors を使い始めるなら、フィルタの方式について設定することはない。

既存の vector bucket の中に新しくインデックスを作った場合にどちらの方式になるかは、告知に書かれていない。告知が既定と言っているのは「新しい vector bucket のインデックス」だけだ。

既存インデックスは比べてから切り替える

既に運用しているインデックスで pre-filtering を使うには、UpdateIndexMode API でインデックスを更新する。インデックスを作り直す手順ではなく、その場(in place)での更新だ。

切り替える前に、QueryVectors のクエリ単位のパラメータで pre-filtering を指定し、同じインデックスで現行方式と結果を比べられる。本番のインデックスにいきなり手を入れずに済むので、次の順で進めるのが無理がない。

  1. 普段使っているフィルタ付きクエリから、絞り込みの強いものを中心にいくつか選ぶ
  2. QueryVectors のクエリ単位のパラメータで pre-filtering を指定し、現行方式の結果と件数・中身を比べる
  3. 応答時間など、自分のアプリで気にしている指標も同じクエリで見ておく
  4. 差に納得できたら UpdateIndexMode でインデックスを切り替える

告知はクエリ単位のパラメータがあるとだけ書いており、パラメータ名や指定する値までは示していない。切り替えでレイテンシがどう変わるか、UpdateIndexMode で元の方式に戻せるかも、告知には書かれていない。3 番目の確認を入れているのはそのためだ。

パスや URL の前方一致に $startsWith

pre-filtering と同時に、前方一致の演算子 $startsWith が加わった。告知はパスや URL のような値での絞り込みを用途に挙げている。たとえば文書の保存先パスや元ページの URL をメタデータに持たせていれば、特定のディレクトリ配下や特定サイトの配下だけを検索対象にする、といった使い方が考えられる。

これまで同じことをするには、ディレクトリやサイトを表す値を別のメタデータとして持たせる必要があったはずだが、告知は従来の回避策には触れていない。$startsWith が pre-filtering に切り替えたインデックスでしか使えないのかどうかも、告知からは読み取れない。

対象リージョンと展開の時点

pre-filtering は追加料金なしで使える。対象は、S3 Vectors が使えるすべての商用 AWS リージョンと、AWS 中国リージョンだ。操作は AWS CLI、AWS SDK、Amazon S3 コンソールのいずれからでもできる。

ただし告知時点では展開中で、完了は「数日のうち」とされていた。比較用のクエリが期待どおりに通らない場合は、利用リージョンへの展開状況を確認したい。

出典 種別について