Docs Menu
Docs Home
/ /

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 ベクトル検索 は、 MongoDB v6.0.11 、v7.0.2 、またはそれ以降を実行実行中実行中Atlas クラスターによる 任意の検索と、 MongoDB v.. 、v..6 0、v..16 7010732、またはそれ以降また、Atlas CLI を使用して作成した、自己管理型またはローカル Atlas 配置でMongoDB ベクトル検索 を使用することもできます。

filter

オブジェクト

任意

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

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

limit

Int

必須

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

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

numCandidates

Int

任意

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

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

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

このオーバーリクエスト パターンは、近似最近傍探索でレイテンシと再現率のバランスを取るためのお勧めの方法であり、当社では具体的なデータセットのサイズとクエリ要件に基づきこのパラメーターを調整することをお勧めしています。

path

文字列

必須

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

queryVector

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

必須

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

サブタイプ float32int8、または int1 を持つ BSON 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オプションは使用できません。

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

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

戻る

text

項目一覧