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
:インデックスを作成するフィールドの名前とそのインデックス構成を指定するドキュメント。 オプションの詳細については、Atlasmappings.fields
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ドキュメントを参照してください。