Overview
このガイドでは、 MongoDB Search およびMongoDB ベクトル検索インデックスを作成および管理する方法を学習できます。これらのインデックスを使用すると、次の機能を使用できます。
MongoDB Search: 高速で全文検索を実行
MongoDB ベクトル検索:ベクトル埋め込みに対してセマンティック(類似性)検索を実行
MongoDB Search およびMongoDB ベクトル検索インデックスは、インデックスフィールドを指定し、これらのフィールドにインデックスを作成する方法を指定し、その他のオプションの構成を設定します。
このガイドでは、次のアクションを実行してMongoDB Search およびMongoDB ベクトル検索インデックスを管理する方法について説明します。
注意
サンプル データ
このガイドの例では、Atlasサンプルデータセットの 1 つである sample_mflixデータベース内の embedded_moviesコレクションを使用します。Atlasサンプルデータのインポート手順については、Atlas ドキュメントのサンプル データのロードを参照してください。
検索インデックスモデルの作成
MongoDB Searchインデックスを作成するには、まずインデックス仕様を設定する SearchIndexModelインスタンスを構築する必要があります。 SearchIndexModelインスタンス の構築を開始するには、SearchIndexModel::builder() メソッドを呼び出します。
注意
インスタンス化モデル
Rust ドライバーは、 SearchIndexModelを含む一部の構造体型を作成するためのビルダ設計パターンを実装します。 builder()メソッドを使用して、オプション ビルダー メソッドを連鎖させることで、各タイプのインスタンスを構築できます。
Rust ドライバーは、次のSearchIndexModelビルダ メソッドを提供します。
ビルダーメソッド | Parameter Type | 説明 |
|---|---|---|
|
| インデックスの定義を指定します。この設定を省略すると、ドライバーは動的マッピングを含むMongoDB Searchインデックスを作成します。 |
|
| インデックス名を設定します。この設定を省略すると、ドライバーは名前を |
|
| インデックスのタイプを設定します。この設定を省略すると、ドライバーはデフォルトでMongoDB Searchインデックスを作成します。 |
MongoDB Searchフィールドマッピングの詳細については、Atlas ドキュメントの「 フィールド マッピングの定義 」を参照してください。
MongoDB ベクトル検索インデックスの定義の詳細については、Atlas ドキュメントの「 ベクトル検索のフィールドにインデックスを作成する方法 」を参照してください。
サンプルモデル
次の例では、SearchIndexModelインスタンスを作成して、search_idx という名前のインデックスの仕様を提供します。コードでは、title フィールドと released フィールドの静的マッピングを指定します。
let def = doc! { "mappings": doc! { "dynamic": false, "fields": { "title": {"type": "string"}, "released": {"type": "date"} } }}; let idx_model = SearchIndexModel::builder() .definition(def) .name("search_idx".to_string()) .index_type(SearchIndexType::Search) .build();
次の例では、vs_idx という名前のインデックスの仕様を提供するための SearchIndexModel インスタンスを作成します。コードは、埋め込みパスを plot_embedding に指定し、1536 次元にインデックスを付け、"euclidean" ベクトル類似度関数を使用します。
let def = doc! { "fields": [{ "type": "vector", "path": "plot_embedding", "numDimensions": 1536, "similarity": "euclidean", }] }; let idx_model = SearchIndexModel::builder() .definition(def) .name("vs_idx".to_string()) .index_type(SearchIndexType::VectorSearch) .build();
検索インデックスを作成
コレクションにMongoDB Search またはMongoDB ベクトル検索インデックスを作成するには、Collectionインスタンスで create_search_index() メソッドを呼び出します。このメソッドは、SearchIndexModelインスタンスで指定されたインデックスモデルをパラメータとして受け入れます。
例
次の例では、 embedded_moviesコレクションにMongoDB Searchインデックスを作成しています。このコードでは、インデックス名を設定し、動的マッピングを可能にする SearchIndexModel が作成されます。次に、コードは SearchIndexModelインスタンスを create_search_index() メソッドに渡してMongoDB Searchインデックスを作成します。
let idx_model = SearchIndexModel::builder() .definition(doc! { "mappings": doc! {"dynamic": true} }) .name("example_index".to_string()) .build(); let result = my_coll.create_search_index(idx_model).await?; println!("Created MongoDB Search index:\n{}", result);
Created MongoDB Search index: "example_index"
複数の検索インデックスの作成
Collectionインスタンスで create_search_indexes() メソッドを呼び出すと、複数のMongoDB Search とベクトル検索インデックスを作成できます。このメソッドは、SearchIndexModel インスタンスのベクトルをパラメーターとして受け入れます。
例
この例では、次のアクションを実行します。
as_idxという名前のMongoDB Searchインデックスを指定するSearchIndexModelインスタンスを作成しますvs_idxという名前のMongoDB ベクトル検索インデックスを指定するSearchIndexModelインスタンスを作成します両方の
SearchIndexModelインスタンスのvecをcreate_search_indexes()メソッドに渡しますembedded_moviesコレクションにMongoDB Search インデックスとMongoDB ベクトル検索インデックスを作成します
let as_idx = SearchIndexModel::builder() .definition(doc! { "mappings": doc! {"dynamic": true} }) .name("as_idx".to_string()) .build(); let vs_idx = SearchIndexModel::builder() .definition(doc! { "fields": [{ "type": "vector", "path": "plot_embedding", "numDimensions": 1536, "similarity": "euclidean", }] }) .name("vs_idx".to_string()) .index_type(SearchIndexType::VectorSearch) .build(); let models = vec![as_idx, vs_idx]; let result = my_coll.create_search_indexes(models).await?; println!("Created indexes:\n{:?}", result);
Created MongoDB Search indexes: ["as_idx", "vs_idx"]
検索インデックスをリストする
コレクションで list_search_indexes() メソッドを呼び出すと、コレクションの既存のMongoDB Search およびMongoDB ベクトル検索インデックスに関する情報にアクセスできます。
例
次の例では、このページの「 複数の検索インデックスの作成 」セクションで作成されたMongoDB Search およびMongoDB ベクトル検索インデックスに関する情報にアクセスします。このコードではlist_search_indexes() メソッドを呼び出し、コレクションのMongoDB Search インデックスとMongoDB ベクトル検索インデックスのリストを出力します。
let mut cursor = my_coll.list_search_indexes().await?; while let Some(index) = cursor.try_next().await? { println!("{}\n", index); }
{ "id": "...", "name": "as_idx", "status": "READY", "queryable": true, "latestDefinitionVersion": {...}, "latestDefinition": { "mappings": { "dynamic": true } }, "statusDetail": [...] } { "id": "...", "name": "vs_idx", "type": "vectorSearch", "status": "READY", "queryable": true, ..., "latestDefinition": { "fields": [{ "type": "vector", "path": "plot_embedding", "numDimensions": 1536, "similarity": "euclidean" }] }, "statusDetail": [...] }
Tip
カーソルの反復処理の詳細については、「 カーソルを使用したデータへのアクセス」ガイドを参照してください。
検索インデックスをアップデートする
MongoDB Search またはMongoDB ベクトル検索インデックスを更新するには、Collectionインスタンスで update_search_index() メソッドを呼び出します。このメソッドは次のパラメーターを受け入れます:
更新するインデックスの名前
変更されたインデックス定義ドキュメント
例
以下の例は、このページの「複数のベクトル検索インデックスの作成」セクションで作成されたvs_index という名前の Vector Search インデックスを更新します。このコードは、インデックスに "dotProduct" をベクトル類似度関数として使用するよう指示する新しいインデックス定義ドキュメントを作成します。次に、このコードは update_search_index() メソッドを呼び出してインデックスを更新します。
let name = "vs_index"; let updated_def = doc! { "fields": [{ "type": "vector", "path": "plot_embedding", "numDimensions": 1536, "similarity": "dotProduct", }] }; my_coll.update_search_index(name, updated_def).await?;
検索インデックスを削除する
MongoDB Search またはMongoDB ベクトル検索インデックスを削除するには、Collectionインスタンスで delete_search_index() メソッドを呼び出します。このメソッドは、削除するインデックスの名前をパラメータとして受け入れます。
例
次の例では、このページの「検索インデックスの作成」セクションで作成された という名前のMongoDBexample_index Searchインデックスを削除します。このコードはインデックス名を メソッドに渡して、インデックスを削除します。delete_search_index()
let name = "example_index"; my_coll.drop_search_index(name).await?;
詳細情報
Rust ドライバーを使用して作成できるその他のインデックスの詳細については、「インデックスのガイド 」を参照してください。
MongoDB Search の詳細については、次の Atlas ドキュメントを参照してください。
MongoDB ベクトル検索の詳細については、次の Atlas ドキュメントを参照してください。
API ドキュメント
このガイドで言及されているメソッドとタイプの詳細については、次のAPIドキュメントを参照してください。