ビューでMongoDB ベクトル検索インデックスを作成して、ドキュメントとコレクションを変換することで、コレクションの部分的なインデックス、互換性のないデータ型やデータモデルのサポートなどを行うことができます。
次の例では、付属の sample_mflix サンプルデータベースを使用します。
注意
曖昧さ回避
このページでは標準ビューについて説明します。オンデマンドのマテリアライズドビューの詳細については、「オンデマンドのマテリアライズドビュー」を参照してください。
ビュー タイプの違いについては「オンデマンドのマテリアライズドビューとの比較」を参照してください。
要件
MongoDB 8.0 以降を使用する必要があります。
MongoDB v8.0以降の場合:
Atlas UIまたは Atlas 管理APIを使用して、ビューにMongoDB ベクトル検索インデックスを作成します。
ソースコレクションに対してMongoDB ベクトル検索クエリを実行します。ビュー で作成されたMongoDB ベクトル検索インデックスを参照します。これらのクエリでは、 ソースコレクションに現れる元のドキュメントが返されます。
MongoDB v8.1 以降の場合、さらに以下のことが可能です。
mongoshとドライバー メソッド、db.collection.createSearchIndex()、db.collection.updateSearchIndex()、db.collection.dropSearchIndex()、および$listSearchIndexesを使用して、ビューでMongoDB ベクトル検索インデックスを作成および管理します。ビューに対してMongoDB ベクトル検索クエリを実行します。
制限
MongoDB ベクトル検索 は、次のステージを持つビューをサポートしています。
インデックス名は、ソース コレクションとそのすべてのビューにわたって一意である必要があります。
MongoDB Vector Search doesn't support view definitions with operators that produce dynamic results, such as the $$USER_ROLES system variable and the
$randaggregation operator.MongoDB ベクトル検索クエリでは、 ソースコレクションに現れる元のドキュメントが返されます。
例: ドキュメントのフィルタリング
ビューを作成するには、createCollection の権限が必要です。
ドキュメントをフィルターして、コレクションに部分的にインデックスを付けることができます。次の例では、sample_mflix.embedded_movies コレクションにビューを作成し、ベクトル埋め込みフィールドを持つドキュメントのみがインデックスされるようにします。
パフォーマンスに関する考慮事項
非常に複雑なビュー変換では、インデックスの作成とクエリ時間が増加する可能性があります。これは、インデックス作成(最初の同期と 定常状態のレプリケーション)中にoplogエントリをフィルタリングして変換するとき、およびクエリ時に返されたドキュメントにそれらの変換を適用するときに、mongodはビュー定義を読み取る必要があるためです。
Atlas で余計なレプリケーション負荷を回避するために、 マテリアライズドビューの作成を検討してください。ビュー変換によるクエリレイテンシを回避するために、ソースコレクションを直接クエリすることもできます。
トラブルシューティング
インデックスの変更 FAILED
インデックスは次のシナリオで FAILED ステータスに変更されます。
MongoDB ベクトル検索と互換性のないビューにインデックスを作成する場合
MongoDB ベクトル検索 の互換性要件を満たさない方法でビューを編集する。
ビューのソース コレクションを削除または変更します。
たとえば、1 つのビューが別のビュー上に作成され、親ビューのソースを別のコレクションに変更した場合です。
注意
この制限は、ビューが他のビューの子である場合にも適用されます。たとえば、すべての子が由来するソース コレクションを変更または削除することはできません。
インデックスの変更 STALE
インデックスは次のシナリオで STALE ステータスに変更されます。
警告
ビューで定義された集計パイプラインがコレクション内のドキュメントと互換性がない場合、検索レプリケーションは失敗します。たとえば、$toDouble 式が配列を含むドキュメント フィールドに対して操作されると、レプリケーションは失敗します。ビューがコレクション内のすべてのドキュメントでエラーなく動作することを確認してください。
インデックスが
READYのときにビュー定義によって集計が失敗した場合、インデックスはSTALEになります。ドキュメントを解決するかビュー定義を変更して失敗しないようにすると、インデックスはREADYに戻ります。STALEの場合でも、インデックスは引き続きクエリ可能です。インデックスがoplogから削除されると、インデックスの再構築がトリガーされます。インデックスが
BUILDINGの時にビュー定義によって集計パイプラインに障害が発生した場合、インデックス構築はそのドキュメントが修正されるまで停止します。ドキュメントを解決するか、ビュー定義を変更すると、インデックスはREADYに戻り、失敗しなくなります。
Atlas UIのインデックスステータスの詳細ページでインデックスステータスを表示できます。
エラー: $search はパイプラインの最初のステージとしてのみ有効です
このエラーは、8.1 より前のバージョンのMongoDBを使用してビューをクエリすると表示されます。
8.0 より前のバージョンのMongoDBを使用している場合は、ビューを直接クエリするために 8.1+ にアップグレードすることをお勧めします。ソースコレクションをクエリするには、 8.0 にアップグレードします。
MongoDB 8.0 を使用する場合は、 ソースコレクションに対してビューインデックスをクエリする必要があります。例、ビューではなくコレクションで
.aggregate()を実行します。
インデックス プロセス
ビューでMongoDB ベクトル検索インデックスを作成すると、mongot プロセスは通常のコレクションでMongoDB ベクトル検索インデックスを作成する場合と同じタスクを実行します。mongot プロセス:
コレクションのインデックス定義 のルールに基づいてMongoDB ベクトル検索インデックスを作成します。
MongoDB ベクトル検索インデックスを定義したコレクションのドキュメントとインデックスの現在の状態に関する 変更ストリーム をモニターします。
MongoDB ベクトル検索クエリを処理し、一致するドキュメントのドキュメントID とその他の検索メタデータを
mongodに返します。その後、ドキュメント全体が検索され、その結果がクライアントに返されます。
ビューでMongoDB ベクトル検索インデックスを作成すると、ステップ 1 と 2 中にビュー定義が適用され、変換されたドキュメントは検索インデックス定義に基づいてインデックス化され、ディスクに保存されます。
詳細
ビューの詳細については、「ビュー」を参照してください。
ビューにMongoDB Searchインデックスを作成するには、 MongoDB Search でビューを使用する を参照してください。