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