定義
$vectorSearch ステージは、各ストリーミングドキュメントに MongoDB Vector Search クエリの結果を追加します。入力ドキュメントごとに、このステージはコレクションに対して $vectorSearch クエリを実行し、指定したフィールドに結果を追加します。
配置
$vectorSearch パイプラインの中間のステージである必要があります。パイプラインの $source またはシンクとして使用しないでください。
構文
$vectorSearchパイプライン ステージには次のプロトタイプ形式があります。
{ "$vectorSearch": { "from": { "connectionName": "<registered-atlas-connection>", "db": "<database>", "coll": "<collection>" }, "as": "<output-field>", "queryVector": [<number>, ...] | <expression>, "query": { "text": "<string>" | <expression> }, "model": "<embedding-model>", "index": "<vector-index-name>", "path": "<field-containing-vectors>", "numCandidates": <int>, "limit": <int>, "filter": { ... }, "exact": <bool>, "searchNodePreference": { "key": "<preference>" }, "pipeline": [ { $<aggregation-stage>: { ... } }, ... ], "let": { "<variable>": <expression>, . . . } } }
$vectorSearchステージは、次のフィールドを持つドキュメントを取得します。
フィールド | タイプ | 必要性 | 説明 |
|---|---|---|---|
| ドキュメント | 必須 | 各入力ドキュメントに対して |
| string | 必須 | 接続レジストリ内の Atlas 接続の名前。Atlas Stream Processing は、パース時にその他の接続タイプを拒否します。 |
| literal string | 必須 | ターゲットデータベースの名前。 |
| literal string | 必須 | MongoDB Vector Search インデックスを含むターゲット コレクションの名前。 |
| string | 必須 | 検索結果配列のストリーミング ドキュメントの出力フィールド。MongoDB ベクトル検索 が一致するドキュメントを返さない場合、Atlas Stream Processing はこのフィールドを空の配列に設定します。 警告: このフィールドが空の場合、またはストリーム メタデータ フィールド名と衝突する場合、Atlas Stream Processing は開始時に |
| 配列 | フィールドパス式 | 条件付き | |
| ドキュメント | 条件付き | |
| string | フィールドパス式 | 条件付き | 自動埋め込みに使用するクエリテキスト。 |
| string | 任意 | MongoDB ベクトル検索が
|
| string | 必須 | クエリする MongoDB ベクトル検索インデックスの名前。 |
| string | 必須 | 検索対象となるベクトル埋め込みを含むターゲット コレクションのフィールド。 |
| 整数 | 条件付き | 検索中にMongoDB ベクトル検索 が考慮する候補の数。 |
| 整数 | 必須 | 返される結果の最大数。 警告: |
| ドキュメント | 任意 | ベクトル検索の前に適用するプレフィルター式。サポートされている演算子については、「 フィルター 」を参照してください。 警告: |
| ブール値 | 任意 | Ann 検索または ENN 検索のどちらを実行するかを指定するフラグ。 値は次のいずれかになります。
デフォルトは |
| ドキュメント | 任意 | Atlas Stream Processing がクエリを特定の検索ノードにルーティングするために使用する |
| 配列 | 任意 | Atlas Stream Processing が検索結果に対して実行する追加の集計ステージ。これらは入力ドキュメントに接続される前に実行されます。 |
| ドキュメント | 任意 |
動作
クエリ モード
$vectorSearch queryVectorは、2 query.textつの相互に排他的なクエリモードをサポートします。ベクトル埋め込みでは 、自動埋め込みでは です。モードのどちらでも、 リテラル値 またはフィールドパス式を指定できるため、単一のストリーム プロセッサが 入力ドキュメントごとに異なるクエリを発行できます。
Error Handling
対象の MongoDB ベクトル検索インデックスが存在しない場合、$vectorSearch が初めて実行されると、ストリーム プロセッサーはエラー状態になります。Atlas Stream Processing は MongoServerError エラーを報告し、ドキュメントのプロセシングを停止します。
queryVectorquery.textまたは が実行時に間違ったタイプと評価された場合、Atlas Stream Processing は、競合ドキュメントのみをデッドレターキュー(DLQ)にルーティングするか、そうでない場合は削除します。ストリーム プロセッサは、後のドキュメントの処理を続行します。 DLQドキュメントスキーマについては、「 デッド文字キュー 」を参照してください。
結果の処理
Atlas Stream Processing が入力ドキュメントに接続する前に、pipeline を使用して検索結果をさらに処理します。Atlas Stream Processing は pipeline を MongoDB ベクトル検索にそのまま転送します。pipeline 内の入力ドキュメントから値を参照するには、let を介して渡し、$$<variable> として参照します。
例
次の例では、映画と映画館に関するデータが含まれる sample_mflix データセット をクエリします。これらを実行するには、サンプルデータを Atlas クラスターにロードし、 コレクションにMongoDBembedded_movies ベクトル検索インデックスを作成します。