重要
プライベート プレビューからパブリック プレビューに移行する準備として、text タイプのMongoDB ベクトル検索インデックスは非推奨です。「プレビュー機能」を参照してください。
MongoDB Vector Search を構成して、クラスター内のテキストデータのベクトル埋め込みを自動的に生成および管理できます。M10 以上の Atlas クラスターに 1 クリックのAIセマンティック検索インデックスを作成し、Voyage AI埋め込みモデルを使用すると、インデックスの作成、更新、ベクトルによるクエリが簡素化されます。
自動埋め込みを有効にすると、 MongoDB Vector Search は、自動埋め込み用にインデックスされたフィールドに対して、インデックス時に指定された埋め込みモデルを使用して Atlas コレクションを自動的に生成し、クエリ時にクエリ内のテキスト string を使用してフィールドを自動的に生成します。
Considerations
重要
MongoDB ベクトル検索自動埋め込みは、任意のクラウドプロバイダーの任意の M10 以上のクラスターで使用できます。ただし、ベクトル埋め込みを生成するための推論プロセスを取り扱うサービスは、Google Cloud 上で実行されます。つまり、クラスターのクラウドプロバイダーに関係なく、埋め込み生成と取得のためにデータが Google Cloud に送信されます。エンタープライズ レベルのセキュリティを提供しているため、データは クラスターにのみ保存されます。
埋め込みモデルは、共有のマルチテナント推論プラットフォームで実行されます。したがって、プレビュー期間中は、100kドキュメント未満のデータセットを使用し、負荷テストではなく機能の評価のみを目的としてクエリを実行する必要があります。より高い制限を持つユースケースがある場合は、アカウントチームにお問い合わせください。
ワークロードには厳密なレート制限はありませんが、グローバルな制限があります。クエリがレート制限エラー(エラー 409)を返す場合は、アプリケーションコードでバックオフを実行し、再試行します。これにより、アプリケーションはレート制限をグレースフルに処理し、継続的な機能を確保できます。
前提条件
自動埋め込みを使用してベクトル検索を有効にするには、次のものが必要です。
M10あるいはそれ以上のクラスター自動埋め込み用にインデックステキストフィールドを持つコレクション。
次のクライアントの 1 つ:
インデックスを作成するための Atlas UI
mongosh、インデックスの作成とクエリの実行中用インデックスの作成とクエリの実行中には Node Driver 以上が必要6.6.0
MongoDB Vector Search インデックス(自動埋め込み用)
次のセクションでは、テキストフィールドの埋め込みの自動生成を有効にするためのMongoDB ベクトル検索インデックスの構文とフィールドについて説明し、自動埋め込み用にインデックスを構成する手順について説明します。
必要なアクセス権
MongoDB ベクトル検索インデックスを作成および管理するには、Project Data Access Admin 以上のロールが必要です。
インデックスシンタックス
以下は、埋め込みの自動生成を有効にするための構文です。
1 { 2 "fields": [ 3 { 4 "type": "text", 5 "path": "<field-name>", 6 "model": "voyage-3-large | voyage-3.5 | voyage-3.5-lite" 7 } 8 ] 9 }
インデックス フィールド
インデックス定義では、次のフィールドが必要です。
フィールド | タイプ | 説明 |
|---|---|---|
| string | フィールドの型。自動埋め込みの場合、これは |
| string | 自動埋め込み用にインデックスを作成するコレクション内のフィールドの名前。 |
| string | インデックスの埋め込みの生成に使用する Voyage AI 埋め込みモデル。次のいずれかのモデルを指定できます。
インデックスの作成 後に埋め込みモデルを変更すると、 MongoDB ベクトル検索 はデータセットの新しい埋め込みを生成します。MongoDB ベクトル検索 が埋め込みを生成している間も、古い埋め込みを使用してクエリを続行できます。古い埋め込みが新しい埋め込みモデルの埋め込みに置き換えられると、 MongoDB ベクトル検索 は古い埋め込みを削除します。 |
Considerations
自動埋め込みのインデックスフィールドは、次の vector 型のインデックスフィールドと相互に排他的です。
numDimensionssimilarityquantization
コレクションにすでに埋め込みがある場合は、vector 型のフィールドを使用して埋め込みのインデックスを作成する必要があります。埋め込みを使用したフィールドのインデックス作成について詳しくは、「ベクトル検索のフィールドにインデックスを作成する方法」をご覧ください。
埋め込みを自動生成するためにテキストフィールドをインデックス、独自の埋め込みを持つフィールドもインデックスする場合は、text と vector の両方のタイプでインデックスを作成できます。MongoDB ベクトル検索 は、text タイプとしてインデックス付けされたフィールドのみに対するクエリの埋め込みを自動的に生成します。vector タイプとしてインデックス付けされたフィールドを検索するには、クエリに埋め込みを指定する必要があります。
MongoDB Vector Search filter タイプを使用して、データを事前にフィルタリングするためのフィールドのインデックスも可能です。
重要
フィルターされたクエリは通常、同等のフィルターされていないクエリよりも遅くなります。
データの事前フィルタリングの詳細については、「 filter タイプについて 」を参照してください。
自動埋め込みのインデックスの作成
次の手順では、 MongoDB Vector Search インデックスへの自動埋め込みを有効にする手順について説明します。sample_mflix.movies データセットをロードした場合、手順の例は、コレクションの fullplotフィールドで自動埋め込みを有効にする方法を示しています。
自動埋め込みを使用したMongoDBベクトル検索クエリ
自動埋め込みを使用してインデックスを作成した後、インデックス化されたフィールドに対してテキスト クエリを実行できます。MongoDB Vector Search は、インデックスで指定された同じ埋め込みモデルを使用して、クエリ内のテキスト文字列の埋め込みを自動的に生成し、その埋め込みを使って、指定されたクエリ テキストと類似した意味を持つドキュメントのインデックスを検索します。
次のセクションでは、自動埋め込み用にインデックス付けされたフィールドに対してクエリテキストの埋め込みを自動生成するための$vectorSearchパイプラインの構文とフィールドについて説明し、自動埋め込み用にインデックス付けされたフィールドに対してセマンティック検索クエリを実行する方法を説明します。
クエリ構文
次の構文は、自動埋め込み用にインデックス付けされたフィールドに対してクエリを実行する方法を示しています。
1 { 2 "$vectorSearch": { 3 "index": "<index-name>", 4 "limit": <number-of-results>, 5 "numCandidates": <number-of-candidates>, 6 "path": "<field-to-search>", 7 "query": "<query-string>" 8 } 9 }
クエリ フィールド
自動埋め込みを使用するMongoDB ベクトル検索クエリには次のフィールドが必要です。
フィールド | タイプ | 必要性 | 説明 |
|---|---|---|---|
| ブール値 | 条件付き |
EXN検索またはANN検索のどちらを実行するかを指定するフラグ。 値は次のいずれかになります。
省略した場合、デフォルトは |
| string | 必須 | 使用するMongoDB ベクトル検索インデックスの名前。 MongoDB ベクトル検索、インデックス名のスペルをうっかり間違えた場合、または指定されたインデックスがクラスター上にまだ存在しない場合には結果が返されません。 |
| 数値 | 必須 | 結果で返されるドキュメントの数( |
| 数値 | 条件付き |
検索中に使用する最近傍の数。 値は ( |
| string | 必須 | 検索するインデックス付きのベクトルタイプフィールド。 |
| string | 必須 | 埋め込みを自動的に生成し、セマンティック検索を実行するテキスト。 |
Considerations
インデックス付きフィールドに対して 近似最近傍探索 または 厳密最近傍探索 クエリを実行できます。詳しくは、近似最近傍探索 と 厳密最近傍探索 を参照してください。
自動埋め込み のインデックス付きフィールドでは、クエリ内でベクトル埋め込みを指定することはできません。代わりに、フィールドに対して自然言語クエリを実行する必要があります。自動埋め込み用にインデックスされたフィールドに対して自然言語クエリを実行すると、 MongoDB ベクトル検索 は、インデックス付きフィールドと同じ埋め込みモデルを使用して、クエリテキストの埋め込みを自動的に生成します。次に、生成された埋め込みを使用して、インデックス付きフィールドに対してセマンティック検索を実行します。
オプションで、クエリに filter フィールドを指定して、MongoDB ベクトル検索 がセマンティック検索を実行するドキュメントを事前にフィルターすることができます。詳細については、MongoDB ベクトル検索の事前フィルター。をご覧ください。
オプションで、結果内のドキュメントのスコアを検索することもできます。詳細については、 「MongoDB ベクトル検索スコアリング」を参照してください。