AIエージェントの場合: ドキュメントインデックスはhttps://www.mongodb.com/ja-jp/docs/llms.txt で利用可能です。任意のURLパスに .md を追加することで、すべてのページのマークダウン バージョンが利用できます。
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

ベクトル検索クエリの実行

MongoDB ベクトル検索クエリは、 $vectorSearchを最初のステージとして使用する集計パイプラインの形式をとります。このページでは、 ステージの構文、オプション、および$vectorSearch 動作について説明します。

$vectorSearch

$vectorSearchステージは、次のフィールドを持つドキュメントを取得します。

$vectorSearch ステージを定義する場合、exactフィールドを使用して近似最近傍探索または厳密最近傍探索を実行するかを指定できます。

近似近傍(近似最近傍探索)検索

近似最近傍探索(ANN)では、MongoDB ベクトル検索は、多次元空間内での近接性と考慮する近傍の数に基づいて、クエリ内のベクトル埋め込みに最も近いデータ内のベクトル埋め込みを検索します。これは Hierarchical Navigable Small Worldsアルゴリズムを使用し、すべてのベクトルをスキャンすることなく、クエリ内のベクトル埋め込みに最も類似するベクトル埋め込みを見つけます。したがって、近似最近傍探索検索は、重要なフィルターなしで大規模なデータセットをクエリするのに最適です。

注意

Ann 検索の最適な再現率は通常、enn 検索との結果の重複が約90 -95 % であると考えられますが、レイテンシは大幅に低くなります 。これにより、精度とパフォーマンスの適切なバランスが実現できます。 MongoDB ベクトル検索でこれを実現するには、クエリ時に numCandidatesパラメータを調整します。

近似最近傍探索を検索するには、numCandidatesフィールドを指定する必要があります。このフィールドは、MongoDB ベクトル検索が検索する際に考慮する最近傍の数を決定します。

精度を高めるために、返されるドキュメント数(limit)の少なくとも 20 倍である numCandidates 数値を指定することをお勧めします。厳密最近傍探索 クエリ結果と 近似最近傍探索 クエリ結果間の不整合を減らします。例、limit を設定すると 5 結果が返される場合は、開始点として numCandidates100 に設定することを検討してください。詳しくは、「クエリ結果の精度を測定する方法」を参照してください。

このオーバーリクエスト パターンは、 近似最近傍探索 検索でレイテンシと 再現率 のトレードオフを行う推奨方法です。ただし、特定のデータセット サイズとクエリ要件に基づいて、numCandidates パラメータを調整することをお勧めします。正確な結果が得られるようにするには、次の変数を考慮してください。

完全厳密最近傍探索

厳密最近傍探索の場合、MongoDB ベクトル検索は、すべての埋め込み間の距離を計算してすべてのインデックスが付けられたベクトル埋め込みを網羅的に検索し、クエリ内のベクトル埋め込みに対して厳密最近傍探索を見つけます。これは計算負荷が高く、 クエリレイテンシに悪影響を影響可能性があります。したがって、次のユースケースには 厳密最近傍探索 が推奨されます。

$vectorSearch は、それが表示されるすべてのパイプラインの最初のステージである必要があります。

$vectorSearchは、ビュー定義と次のパイプラインステージでは使用できません。

[1] このステージには $vectorSearch の結果を渡すことができます。

これらのMongoDB ベクトル検索フィールドタイプの詳細については、「 ベクトル検索のフィールドにインデックスを作成する方法 」を参照してください。

MongoDB ベクトル検索 は、返されるすべてのドキュメントに、0 から 1 までの固定範囲のスコアを割り当てます(0 は類似性が低く、1 は類似性が高いことを示します)。

注意

データを事前にフィルタリングしても、 MongoDB ベクトル検索 が クエリにvectorSearchScore $vectorSearchを使用して返すスコアには影響しません。

重要

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

  • MongoDB ベクトル検索 は、$eq の短縮形をサポートしています。短縮形式では、クエリに $eq を指定する必要はありません。

    $eq の付いた次のフィルターを例に挙げます。

    "filter": { "_id": { "$eq": ObjectId("5a9427648b0beebeb69537a5") }

    これは、$eq の短縮形を使用する次のフィルターと同等です。

    "filter": { "_id": ObjectId("5a9427648b0beebeb69537a5") }
  • $and MQL 演算子を使用して、1 回のクエリでフィルターの配列を指定できます。

    たとえば、genres フィールドが Action に等しく、かつ year フィールドの値が 19992000、または 2001 に等しいドキュメントの次のプレフィルターを考えてみましょう。

    "filter": {
    "$and": [
    { "genres": "Action" },
    { "year": { "$in": [ 1999, 2000, 2001 ] } }
    ]
    }
  • ファジー検索、フレーズ一致、ロケーション フィルタリング、ロケーション フィルタリング、その他の分析テキストなどの高度なフィルタリング機能については、vectorSearch 演算子を使用します。$search ステージで。

これらの例を実行する前に、次のアクションを実行する必要があります。