Docs Menu
Docs Home
/ /

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

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

$vectorSearch

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

$vectorSearchステージを定義する場合、exact フィールドを使用して SN 検索または ENN 検索のどちらを実行するかを指定できます。

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

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

  • $lookup サブパイプライン [1]

  • $facet パイプライン ステージ

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

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

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

返される各ドキュメントには、メタデータとしてスコアが含まれます。各ドキュメントのスコアと結果セットを返すには、集計パイプラインで $project ステージを使用し、score をプロジェクトするフィールドとして構成します。scoreフィールドに、値 vectorSearchScore を持つ $meta式を指定します。構文は次のとおりです。

1db.<collection>.aggregate([
2 {
3 "$vectorSearch": {
4 <query-syntax>
5 }
6 },
7 {
8 "$project": {
9 "<field-to-include>": 1,
10 "<field-to-exclude>": 0,
11 "score": { "$meta": "vectorSearchScore" }
12 }
13 }
14])

注意

vectorSearchScorescore $meta 式として使用できるのは、$vectorSearch パイプラインステージの後のみです。他のクエリの後に vectorSearchScore を使用すると、 MongoDB はMongoDB v8.2 以降の警告をログに記録します。

注意

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

$vectorSearch filter オプションは、BSON ブール値、日付、objectId、数値、string、UUID の値(これらのタイプの配列を含む)をマッチングします。

データのフィルタリング基準とするフィールドには、vectorSearch タイプのインデックス定義に含まれるフィルタータイプとしてインデックスを作成する必要があります。データをフィルタリングすると、セマンティック検索の範囲が絞り込まれ、すべてのベクトルが比較対象とならないように徹底するのに役立ちます。

MongoDB ベクトル検索$vectorSearchfilter は、次のMQL演算子に対して オプションをサポートしています。

タイプ
MQL 演算子

Equality(等価)

Range(範囲)

「イン」セット

存在

論理

注意

$vectorSearchfilter オプションは、他のクエリ演算子集計パイプライン演算子、またはMongoDB Search 演算子をサポートしていません。

  • 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 ステージで使用します。

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

  • データセットをクラスターに追加します。

  • コレクションのMongoDB ベクトル検索検索インデックスを作成します。手順については、MongoDB ベクトル検索インデックスの作成手順を参照し、基本的な例またはフィルター例の構成を希望言語でコピーします。

注意

mongosh を使用する場合、マシンによってはサンプルコードから queryVector をターミナルに貼り付けるのに時間がかかる場合があります。

戻る

インデックス参照

ルール バッジを取得する

「Vector Search の基礎」を無料で習得できます。

詳細

項目一覧