Docs Menu
Docs Home
/ /

vectorSearch (MongoDB Search 演算子)

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

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を実行中クラスターでの Ann 検索をサポートしますv7.0.2 以降 およびMongoDB v6.0.16を実行中クラスターでの ENN 検索v7.0.10、v7.3.2、以降に更新します。

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 ベクトルで、クエリ ベクトルを表します。

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

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

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

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

score

オブジェクト

任意

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

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

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

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

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

vectorSearch 演算子を使用して、検索するフィールドをインデックス必要があります。 MongoDB Searchインデックス定義では、次のタイプのフィールドにインデックスことができます。

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

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

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

vectorタイプのインデックス定義で、データをフィルタリングするフィールドをインデックス必要があります。

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

詳細については、「 結果内のドキュメントにスコアを付ける 」と「 スコアの詳細を返す 」を参照してください。

vectorSearchvectorSearch演算子はクエリの最上位演算子である必要があります。したがって、次のMongoDB Search 演算子 内では 演算子は使用できません。

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

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

$searchvectorSearch検索テスターを使用して、 演算子で クエリを実行することはできません。

次の例では、サンプルデータのsample_mflix.embedded_movies コレクションを使用します。サンプルデータをロードし、コレクションにサンプルインデックスを作成すると、クエリ内の プレースホルダーと プレースホルダーを置き換えた後、コレクションに対して次の ANN クエリと ENN<connection-string> <index-name>クエリを実行できます。

戻る

text

項目一覧