Atlas Search インデックス
項目一覧
Overview
MongoDB Atlas Search 機能を使うと、Atlas でホストされているコレクションを全文検索できます。Atlas Search のクエリを実行する前に、インデックスを作成して、インデックスを作成するフィールドとそのインデックス方法を指定する必要があります。
Atlas Search の詳細については、Atlas Search ドキュメントの「 Atlas Search の概要 」を参照してください。
サンプル データ
このガイドの例では、 Atlas サンプル データセットのsample_mflix
データベース内の movies
コレクションを使用します。 MongoDB Atlas クラスターを無料で作成して、サンプル データセットをロードする方法については、 「 Atlas を使い始める 」ガイドを参照してください。
C++アプリケーションから sample_mflix
コレクションの Atlas Search インデックスを管理するには、まず Atlas クラスターに接続する mongocxx::client
をインスタンス化し、次の値を db
変数と collection
変数に割り当てます。
auto db = client["sample_mflix"]; auto collection = db["movies"];
次に、collection
変数で search_indexes()
メソッドを呼び出して、コレクションで mongocxx::search_index_view
をインスタンス化します。
auto siv = collection.search_indexes();
mongocxx::search_index_view
クラスには、Atlas Search インデックスを操作できる次のメンバー関数が含まれています。
create_one() : 指定された構成で Atlas Searchインデックスを作成します
create_many() : 指定された構成で複数の Atlas Search インデックスを作成します
list() :コレクションの
mongocxx::cursor
Atlas Search インデックスのリストをポイントする インスタンスを返しますupdate_one() : 指定された Atlas Searchインデックスの定義を更新します
drop_one() :コレクションから指定したインデックスを削除します
注意
Atlas Search インデックス管理は非同期
MongoDB C++ドライバーは Atlas Search インデックスを非同期に管理します。次のセクションで説明されているライブラリ メソッドは、サーバー応答をすぐに返しますが、Atlas Search インデックスへの変更はバックグラウンドで行われ、しばらくが完了しないと完了しない可能性があります。
次のセクションでは、Atlas Search インデックス管理の各メソッドの使用方法を示すコード例を示します。
Atlas Search インデックスの作成
コレクションに単一の Atlas Searchインデックスを作成するには、mongocxx::search_index_view
インスタンスで create_one()
メソッドを呼び出し、作成するインデックスを指定する mongoxcc::search_index_model
インスタンスで渡します。
mongocxx::search_index_model
コンストラクターには次の引数が必要です。
name
:インデックスの名前を指定する文字列definition
:mappings
フィールドを含むドキュメント。これは、インデックスのフィールドを構成する方法を指定します
Tip
Atlas Searchインデックスで構成できるフィールドの完全なリストについては、Atlas Search ドキュメントの「 Atlas Search インデックスシンタックスの確認 」ガイドを参照してください。
次のセクションでは、静的または動的マッピングを使用する単一の Atlas Searchインデックスを作成する方法を示します。
静的マッピングを使用した Atlas Search インデックスの作成
Atlas Searchインデックスの静的マッピングを使用して、インデックスを作成するフィールドを指定し、個々のフィールドのインデックスオプションを構成しインデックス。
静的マッピングを使用する単一の Atlas Searchインデックスを作成するには、まず mappings
フィールドを含む definition
ドキュメントを作成します。 mappings
フィールドで、次のフィールドと値を含むドキュメントを指定します。
dynamic
:false
に設定します。fields
:インデックスを作成するフィールドの名前とそのインデックス構成を指定するドキュメント。mappings.fields
オプションの詳細については、Atlas Search ドキュメントの「 静的マッピングの例 」を参照してください。
次に、name
string と definition
ドキュメントを mongocxx::search_index_model
コンストラクターに渡して、mongocxx::search_index_model
をインスタンス化します。この mongocxx::search_index_model
インスタンスを create_one()
メソッドに渡して、指定された Atlas Searchインデックスをコレクションに追加します。
次の例は、静的マッピングを使用する単一の Atlas Searchインデックスを作成する方法を示しています。
// Create an index model with your index name and definition containing the fields you want to index auto name = "myStaticIndex"; auto fields = make_document(kvp("title", make_document(kvp("type", "string"), kvp("analyzer","lucene.standard"))), kvp("year", make_document(kvp("type","number")))); auto definition = make_document(kvp("mappings", make_document(kvp("dynamic", false), kvp("fields", fields)))); auto model = mongocxx::search_index_model(name, definition.view()); // Create the search index auto result = siv.create_one(model); std::cout << "New index name: " << result << std::endl;
New index name: myStaticIndex
重要
フィールド名の先頭にドル記号($
)が含まれるフィールドにはインデックスを付けられません。
静的マッピングを使用するタイミングの詳細については、Atlas Search ドキュメントの「 静的マッピング 」セクションを参照してください。
動的マッピングを使用した Atlas Search インデックスの作成
Atlas Searchインデックスの 動的マッピング を使用して、サポートされているタイプのすべてのフィールドを自動的にインデックス化します。サポートされているBSONデータ型のリストについては、Atlas Search ドキュメントの「 データ型 」セクションを参照してください。
動的マッピングを使用する単一の Atlas Searchインデックスを作成するには、まず mappings
フィールドを含む definition
ドキュメントを作成します。 mappings
フィールドで、値が true
に設定されている dynamic
フィールドを含むドキュメントを指定します。次に、name
string と definition
ドキュメントを mongocxx::search_index_model
コンストラクターに渡して、mongocxx::search_index_model
をインスタンス化します。この mongocxx::search_index_model
インスタンスを create_one()
メソッドに渡して、指定された Atlas Searchインデックスをコレクションに追加します。
次の例は、動的マッピングを使用する単一の Atlas Searchインデックスを作成する方法を示しています。
// Create an index model with your index name and definition auto name = "myDynamicIndex"; auto definition = make_document(kvp("mappings", make_document(kvp("dynamic", true)))); auto model = mongocxx::search_index_model(name, definition.view()); // Create the search index auto result = siv.create_one(model); std::cout << "New index name: " << result << std::endl;
New index name: myDynamicIndex
動的マッピングを使用するタイミングの詳細については、Atlas Search ドキュメントの「 動的マッピング 」セクションを参照してください。
複数の Atlas Search インデックスの作成
複数の Atlas Search インデックスを作成するには、mongocxx::search_index_view
インスタンスで create_many()
メソッドを呼び出し、作成する Atlas Search インデックスを指定する mongocxx::search_index_model
インスタンスのベクトルを渡します。
次の例は、複数の Atlas Search インデックスを作成する方法を示しています。
// Create a vector to store Search index models std::vector<mongocxx::search_index_model> models; // Add an index model with dynamic mappings to the input vector auto name_1 = "myDynamicIndex"; auto definition_1 = make_document(kvp("mappings", make_document(kvp("dynamic", true)))); auto model_1 = mongocxx::search_index_model(name_1, definition_1.view()); models.push_back(model_1); // Add an index model with static mappings to the input vector auto name_2 = "myStaticIndex"; auto fields = make_document(kvp("title", make_document(kvp("type", "string"), kvp("analyzer","lucene.standard"))), kvp("year", make_document(kvp("type","number")))); auto definition_2 = make_document(kvp("mappings", make_document(kvp("dynamic", false), kvp("fields", fields)))); auto model_2 = mongocxx::search_index_model(name_2, definition_2.view()); models.push_back(model_2); // Create the search indexes auto result = siv.create_many(models); // Print the search index names std::cout << "New index names:" << std::endl; for (const std::string& name : result) { std::cout << name << std::endl; }
New index names: myDynamicIndex myStaticIndex
Atlas Search インデックスの一覧表示
コレクションの Atlas Search インデックスを一覧表示するには、mongocxx::search_index_view
インスタンスで list()
メソッドを呼び出します。このメソッドでは、コレクションの Atlas Search インデックスを反復処理するために使用できる mongocxx::cursor
インスタンスが返されます。
次の例では、「 複数の Atlas Searchcursor::iterator
インデックスの作成 」のインデックスをポイントする インスタンスを反復処理して、Atlas Search インデックスのリストを出力します。
auto cursor = siv.list(); for (mongocxx::cursor::iterator it = cursor.begin(); it != cursor.end(); ++it) { std::cout << bsoncxx::to_json(*it) << std::endl; }
{ "id" : ..., "name" : "myDynamicIndex", "type" : "search", ..., "latestDefinition" : { "mappings" : { "dynamic" : true } }, ...} { "id" : ..., "name" : "myStaticIndex", "type" : "search", ..., "latestDefinition" : { "mappings" : { "dynamic" : false, "fields" : { "title" : { "type" : "string", "analyzer" : "lucene.standard" }, "year" : { "type" : "number" } } } }, ...}
あるいは、インデックス名を list()
メソッドに渡すことで、特定の Atlas Searchインデックスを一覧表示することもできます。これにより、指定されたインデックスのみを含む結果セットを指す mongocxx::cursor
インスタンスが返されます。
次の例では、list()
メソッドを使用して、myDynamicIndex
という名前のインデックスを出力します。
auto cursor = siv.list("myDynamicIndex"); for (mongocxx::cursor::iterator it = cursor.begin(); it != cursor.end(); ++it) { std::cout << bsoncxx::to_json(*it) << std::endl; }
{ "id" : ..., "name" : "myDynamicIndex", "type" : "search", ..., "latestDefinition" : { "mappings" : { "dynamic" : true } }, ...}
Atlas Search インデックスの更新
Atlas Searchインデックスを更新するには、mongocxx::search_index_view
インスタンスで update_one()
メソッドを呼び出し、更新するインデックスの名前と、インデックスを更新する定義を渡します。
次の例は、 静的マッピングを使用した検索インデックスの作成 から Atlas Searchインデックスを更新して、 フィールドで単純なアナライザを使用する方法を示しています。title
auto update_fields = make_document(kvp("title", make_document(kvp("type", "string"), kvp("analyzer","lucene.simple"))), kvp("year", make_document(kvp("type","number")))); auto update_definition = make_document(kvp("mappings", make_document(kvp("dynamic", false), kvp("fields", update_fields)))); siv.update_one("myStaticIndex", update_definition.view());
Atlas Search インデックスの削除
Atlas Searchインデックスをコレクションから削除するには 、mongocxx::search_index_view
インスタンスで drop_one()
メソッドを呼び出し、削除するインデックスの名前を渡します。
次の例は、myDynamicIndex
という名前の Atlas Searchインデックスを削除する方法を示しています。
siv.drop_one("myDynamicIndex");
詳細情報
インデックスを管理する方法を示す実行可能な例については、「 インデックスを使用したクエリの最適化 」を参照してください。
Atlas Search 機能の使用方法と Atlas Search インデックスの定義方法の詳細なガイドについては、次の Atlas Search ドキュメント ページを参照してください。
API ドキュメント
このガイドで説明されているメソッドの詳細については、次のAPIドキュメントを参照してください。