Overview
このガイドでは、 MongoDB Search インデックスを作成および管理する方法を学習できます。これらのインデックスを使用すると、 MongoDB Search 機能を使用して、Atlas クラスターに保存されているデータに対して高速で全文検索を実行できます。 MongoDB Searchインデックスは、インデックスを作成するフィールド、これらのフィールドのインデックス作成方法、その他のオプション設定を指定してMongoDB Search の動作を構成します。 MongoDB Search インデックスの詳細については、 MongoDB Search ドキュメントを参照してください。
このガイドでは、次のアクションを実行してMongoDB Search インデックスを管理する方法について説明します。
注意
このガイドの例では、Atlas サンプル データセットの 1 つであるsample_trainingデータベース内の postsコレクションにアクセスします。 Atlas サンプル データのインポート手順については、Atlas ドキュメントの「サンプル データのロード」を参照してください。
検索インデックスモデルの作成
MongoDB Searchインデックスを作成するには、まずインデックス仕様を設定する SearchIndexModelインスタンスを構築する必要があります。 SearchIndexModelインスタンス の構築を開始するには、SearchIndexModel::builder() メソッドを呼び出します。
注意
インスタンス化モデル
Rust ドライバーは、 SearchIndexModelを含む多くのさまざまなタイプを作成するためのビルダ設計パターンを実装します。 builder()メソッドを使用して、オプション ビルダー メソッドを連鎖させることで、各タイプのインスタンスを構築できます。
Rust ドライバーは、次のSearchIndexModelビルダ メソッドを提供します。
definition()は、 BSON ドキュメント パラメータを受け入れ、インデックス定義を設定しますname()は、string パラメータを受け入れ、インデックス名を設定します
definition()ビルダー メソッドに渡す BSON ドキュメントには、 mappingsフィールドを含める必要があります。 コレクション内のサポートされているすべてのフィールドを自動的にインデックス化するには、 mappings.dynamicのネストされたフィールドをtrueに設定して動的マッピングを有効にします。 指定されたフィールドのみをインデックス化するには、 mappings.dynamicのネストされたフィールドをfalseに設定し、インデックスを作成するフィールドのリストを含めて静的マッピングを有効にします。
Tip
MongoDB Search フィールド マッピング
例
次の例では、 SearchIndexModelインスタンスにexample_indexという名前のインデックスの仕様を作成します。 このコードでは、 フィールドと フィールドのみをインデックス化するための静的マッピングを設定します。bodydate
let def = doc! { "mappings": doc! { "dynamic": false, "fields": { "body": {"type": "string"}, "date": {"type": "date"} } }}; let idx_model = SearchIndexModel::builder() .definition(def) .name("example_index".to_string()) .build();
検索インデックスを作成
MongoDB Searchインデックスは、Collectionインスタンスで create_search_index() メソッドを呼び出すことで、コレクションに作成できます。このメソッドは次のパラメーターを受け入れます:
インデックス モデル(
SearchIndexModelインスタンスで指定)インデックス オプション(CreateSearchIndexOptions インスタンスで指定)
例
次の例では、 postsコレクションに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インスタンスのベクトルとして指定)インデックス オプション(
CreateSearchIndexOptionsインスタンスで指定)
例
次の例では、 postsコレクションに dynamic_index と static_index という名前の 2 つのMongoDB Search インデックスを作成します。このコードでは、インデックス名と定義を指定するインデックスごとに SearchIndexModel インスタンスが作成されます。次に、コードはこれらのモデルをベクトルとして create_search_indexes() メソッドに渡し、インデックスを作成します。
let dyn_idx = SearchIndexModel::builder() .definition(doc! { "mappings": doc! {"dynamic": true} }) .name("dynamic_index".to_string()) .build(); let static_idx = SearchIndexModel::builder() .definition(doc! {"mappings": doc! { "dynamic": false, "fields": { "title": {"type": "string"}}}}) .name("static_index".to_string()) .build(); let models = vec![dyn_idx, static_idx]; let result = my_coll.create_search_indexes(models).await?; println!("Created MongoDB Search indexes:\n{:?}", result);
Created MongoDB Search indexes: ["dynamic_index", "static_index"]
検索インデックスをリストする
コレクションで list_search_indexes() メソッドを呼び出すと、コレクションの既存のMongoDB Search インデックスに関する情報にアクセスできます。このメソッドは次のパラメーターを受け入れます:
に関する情報を検索するインデックスの名前
AggregateOptionsインスタンスで指定される集計オプション
インデックス オプション( ListSearchIndexOptionsインスタンスで指定)
例
次の例では、このページの「 複数の検索インデックスの作成 」セクションで作成されたMongoDB Search インデックスに関する情報にアクセスします。このコードでは、list_search_indexes() Noneメソッドを呼び出し、各パラメータに対して の値が渡されます。これは、デフォルトオプションを持つすべてのMongoDB Search インデックスに関する情報を返すようにドライバーに指示します。次に、コードは検索インデックスを出力します。
let mut cursor = my_coll.list_search_indexes().await?; while let Some(index) = cursor.try_next().await? { println!("{}\n", index); }
{ "id": "...", "name": "dynamic_index", "status": "READY", "queryable": true, "latestDefinitionVersion": {...}, "latestDefinition": { "mappings": { "dynamic": true } }, "statusDetail": [...] } { "id": "...", "name": "static_index", "status": "READY", "queryable": true, "latestDefinitionVersion": {...}, "latestDefinition": { "mappings": { "dynamic": false, "fields": { "title": { "type": "string" } } } }, "statusDetail": [...] }
Tip
カーソルの反復処理の詳細については、「 カーソルを使用したデータへのアクセス」ガイドを参照してください。
検索インデックスをアップデートする
MongoDB Searchインデックスを更新するには、Collectionインスタンスで update_search_index() メソッドを呼び出します。このメソッドは次のパラメーターを受け入れます:
更新するインデックスの名前
変更されたインデックス定義ドキュメント
UpdateSearchIndexOptionsインスタンスで指定される インデックス オプション
例
次の例では、このページの「 複数の検索インデックスの作成 」セクションで作成された という名前のMongoDBstatic_index Searchインデックスをアップデートします。このコードでは、静的マッピングではなく動的マッピングを使用するようにインデックスに指示する新しいインデックス定義ドキュメントが作成されます。次に、コードは メソッドを呼び出してインデックスを更新します。update_search_index()
let name = "static_index"; let definition = doc! { "mappings": doc! {"dynamic": true} }; my_coll.update_search_index(name, definition).await?;
検索インデックスを削除する
MongoDB Searchインデックスを削除するには、Collectionインスタンスで delete_search_index() メソッドを呼び出します。このメソッドは次のパラメーターを受け入れます:
削除するインデックスの名前
DropSearchIndexOptionsインスタンスで指定される インデックス オプション
例
次の例では、このページの「検索インデックスの作成」セクションで作成された という名前のMongoDBexample_index Searchインデックスを削除します。このコードはインデックス名を メソッドに渡して、インデックスを削除します。delete_search_index()
let name = "example_index"; my_coll.drop_search_index(name).await?;
詳細情報
Rust ドライバーを使用して作成できるその他のインデックスの詳細については、「インデックスのガイド 」を参照してください。
MongoDB Search の詳細については、次の Atlas ドキュメントを参照してください。
API ドキュメント
このガイドで言及されているメソッドとタイプの詳細については、次のAPIドキュメントを参照してください。