定義
$vectorSearch ステージは、MongoDB ベクトル検索クエリの結果を使用して、各ストリーミング ドキュメントを強化します。各入力ドキュメントに対して、ステージはコレクションに対して $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 ベクトル検索が考慮する候補の数。 |
| 整数 | 必須 | 返される結果の最大数。 警告: |
| ドキュメント | 任意 | ベクトル検索の前に適用する事前フィルター式。サポートされている演算子については、フィルターを参照してください。 警告: |
| ブール値 | 任意 | 近似最近傍探索検索または厳密最近傍探索検索のどちらを実行するかを指定するフラグ。 値は次のいずれかになります。
デフォルトは |
| ドキュメント | 任意 | Atlas Stream Processing がクエリを特定の検索ノードにルーティングするために使用する |
| 配列 | 任意 | Atlas Stream Processing が検索結果に対して実行する追加の集計ステージ。これらは入力ドキュメントに接続される前に実行されます。 |
| ドキュメント | 任意 | Atlas Stream Processing が各入力ドキュメントに対して評価する変数。各値は、リテラル、フィールドパス、または 式であることができます。 |
動作
クエリ モード
$vectorSearch 互いに排除される 2 つのクエリ モードをサポートしています。ベクトル埋め込みの場合は queryVector、自動埋め込みの場合は query.textです。どのモードでも、リテラル値またはフィールドパス式を指定できるため、1 つのストリーム プロセッサーで入力ドキュメントごとに異なるクエリを発行できます。
Error Handling
対象の MongoDB ベクトル検索インデックスが存在しない場合、$vectorSearch が初めて実行されると、ストリーム プロセッサーはエラー状態になります。Atlas Stream Processing は MongoServerError エラーを報告し、ドキュメントのプロセシングを停止します。
ランタイム時に queryVector または query.text が間違った型に評価される場合、Atlas Stream Processing は、構成されている場合は問題のあるドキュメントのみを デッドレターキュー (DLQ) にルーティングします。そうでない場合は削除します。ストリームプロセッサーは後続のドキュメントを引き続き処理します。DLQ ドキュメント スキーマについては、デッドレターキュー (DLQ)。 を参照してください。
結果の処理
Atlas Stream Processing が入力ドキュメントに接続する前に、pipeline を使用して検索結果をさらに処理します。Atlas Stream Processing は pipeline を MongoDB ベクトル検索にそのまま転送します。pipeline 内の入力ドキュメントから値を参照するには、let を介して渡し、$$<variable> として参照します。
例
次の例では、映画と映画館に関するデータが含まれる sample_mflix データセットにクエリを実行します。これらを実行するには、サンプル データを Atlas クラスターにロードし、embedded_movies コレクションに MongoDB ベクトル検索インデックスを作成します。