AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

vectorSearch (MongoDB Search 演算子)

vectorSearch 演算子は、指定されたフィールド内のベクトル埋め込みに対して 近似最近傍探索 または 厳密最近傍探索 を検索します。この演算子を使用して、セマンティック検索と並行して、ファジー検索、フレーズ一致、ロケーション フィルター、ワイルドカード パスワードなし一致などの分析する機能を追加します。

vectorSearch の構文は次のとおりです。

{
"$search": {
"index": "<index name>", // optional, defaults to "default"
"vectorSearch": {
"exact": true | false,
"filter": {<operator-specification>},
"limit": <number-of-results>,
"numCandidates": <number-of-candidates>,
"path": "<field-to-search>",
"queryVector": [<array-of-numbers>],
"score": {<options>}
}
}
}

vectorSearch 次のフィールドを使用してクエリを作成します。

フィールド
タイプ
必要性
説明

exact

ブール値

任意

numCandidatesを省略する場合は、これが必要です。

EXN検索またはANN検索のどちらを実行するかを指定するフラグ。 値は次のいずれかになります。

  • false - Ann検索を実行する場合

  • true - ENN検索を実行する場合

省略した場合、デフォルトは false になります。

MongoDB Vector Search は、 MongoDB v6.0.11を実行中Atlas クラスターでの 近似最近傍探索 をサポートする。v7.0.2 以降、およびMongoDB v6.0.16を実行しているクラスターでのENN検索v7.0.10、v7.3.2、以降に更新します。また、自己管理型またはローカル Atlas 配置でMongoDB Vector Search を使用することもできます。

filter

オブジェクト

任意

MongoDB の検索演算子を使用して、メタデータや特定の検索条件に基づいてドキュメントを事前にフィルタリングします。

詳細については、「プリフィルター」を参照してください。

limit

Int

必須

結果で返されるドキュメントの数( intのみ)。 numCandidatesを指定する場合、この値はnumCandidatesの値を超えることはできません。

シャーディングされたクラスターでは、結果のドキュメント数を制限するために、$limit ステージの後に$searchを使用する必要があります。

numCandidates

Int

任意

このフィールドは、 exactfalseまたは省略されている場合に必須です。

検索中に使用する最近傍の数。 値は ( <=10000以下である必要があります。 返されるドキュメント数より小さい数値は指定できません( limit )。

精度を高めるために、返されるドキュメント数(limit)の 20 倍以上を指定することをお勧めします。

This overrequest pattern is the recommended way to trade off latency and :recall in your ANN searches, and we recommend tuning this parameter based on your specific dataset size and query requirements.

path

文字列

必須

検索するインデックス付きのベクトルタイプフィールド。

queryVector

整数または浮動小数点数の配列

必須

float32 の数値の配列、サブタイプ float32BSON BinData ベクトル、またはサブタイプ int1 または int8BSON BinData ベクトルで、クエリ ベクトルを表します。

サブタイプ float32int8、または int1BSON binData ベクトルを生成する方法の詳細については、事前に量子化されたベクトルを取り込む方法を参照してください。

配列のサイズは、フィールドのインデックス定義で指定されたベクトル次元(numDimensions)と一致している必要があります。

データの埋め込みに使用したのと同じモデルを使用してクエリを埋め込む必要があります。

ベクトルのサブタイプが同じである限り、完全忠実度ベクトルを使用して埋め込みをクエリすることができます。これはサブタイプ float32 を持つbinData ベクトルでのみ可能です。他のサブタイプ(int8int1)を使用した場合、MongoDB Search では結果やエラーは返されません。

score

オブジェクト

任意

一致する検索語句の結果に割り当てられたスコア。スコアを変更するには、次のいずれかのオプションを使用します。

  • boost: 結果のスコアに指定された数値を掛けます。

  • constant: 結果のスコアを指定された数値に置き換えます。

  • function: 指定された式を使用して結果スコアを置き換えます。

クエリで score を使用する方法については、「結果内のドキュメントのスコアリング」を参照してください。

検索対象のフィールドを vectorSearch演算子を使用してインデックス化する必要があります。MongoDB Search インデックス定義では、以下の種類のフィールドをインデックスできます。

  • ベクトル埋め込みを含むフィールド。これはクエリ内で path オプションで指定するフィールドです。

  • ドキュメントを事前にフィルターするフィールド。これらはクエリ filter オプションで指定するフィールドです。

ドキュメントを事前にフィルタリングして、セマンティック検索の範囲を絞り込むことができます。filterフィールドでサポートされているMongoDB Search 演算子を使用して、ドキュメントをクエリおよびフィルタリングします。

重要

フィルターされたクエリは通常、同等のフィルターされていないクエリよりも遅くなります。

vector 型のインデックス定義では、データのフィルタリングに使用するフィールドを必ずインデックス化する必要があります。

検索結果には、各ドキュメントのスコアを含めることができます。$meta 式に searchScore 値を指定し、$project ステージで使用します。scoreDetails フィールド $meta 式の searchScoreDetails 値を指定し、スコアの詳細な内訳を示すこともできます。

詳細については、「結果内のドキュメントのスコアリング」および「スコアの詳細を返す」を参照してください。

vectorSearch 演算子はクエリの最上位演算子でなければなりません。そのため、以下の MongoDB Search の演算子内ではvectorSearch 演算子を使用できません。

vectorSearch 演算子を使用して、vectorSearch タイプのインデックスを使用してインデックス付けされたフィールドをクエリすることはできません。

vectorSearch 演算子で以下の$searchオプションは使用できません。

MongoDB Search Playground では、vectorSearch 演算子を使用して $search クエリを実行できません。

次の例では、サンプル データの sample_mflix.embedded_movies コレクションを使用します。もし、サンプル データを読み込み、コレクションにサンプル インデックスを作成した場合、クエリ内の <connection-string><index-name> のプレースホルダーを置き換えた後に、そのコレクションに対して以下の近似最近傍探索および厳密最近傍探索クエリを実行できます。