Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
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 Vector Search は、 近似最近傍探索 検索を MongoDB v6.0.11を実行中Atlas クラスターでサポートしています。v7.0.2 以降 およびMongoDB v6.0.16を実行中クラスターでの 厳密最近傍探索 検索v7.0.10、v7.3.2、以降に更新します。MongoDB ベクトル検索 は、自己管理型またはAtlas CLI で作成したローカル Atlas 配置でも使用できます。

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、または int1BSON binData ベクトルを生成する方法の詳細については、事前に量子化されたベクトルを取り込む方法を参照してください。

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

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

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

score

オブジェクト

任意

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

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

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

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

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

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

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

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

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

重要

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

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

You can include the score of each document in your search results. Specify the $meta expression with the searchScore value in the $project stage. You can also specify the searchScoreDetails value for the scoreDetails field $meta expression for a detailed breakdown of the score.

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

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

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

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

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

The following examples use the sample_mflix.embedded_movies collection from the sample data. If you load the sample data and create the sample index on the collection, you can run the following ANN and ENN queries against the collection after replacing the <connection-string> and <index-name> placeholders in the queries.

戻る

text

項目一覧