Docs Menu
Docs Home
/ / /
C++ ドライバー
/

Atlas Search インデックス

項目一覧

  • Overview
  • サンプル データ
  • Atlas Search インデックスの作成
  • 静的マッピングを使用した Atlas Search インデックスの作成
  • 動的マッピングを使用した Atlas Search インデックスの作成
  • 複数の Atlas Search インデックスの作成
  • Atlas Search インデックスの一覧表示
  • Atlas Search インデックスの更新
  • Atlas Search インデックスの削除
  • 詳細情報
  • API ドキュメント

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インデックスを作成するには、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インデックスを作成するには、まず 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インデックスの 動的マッピング を使用して、サポートされているタイプのすべてのフィールドを自動的にインデックス化します。サポートされている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 インデックスを作成するには、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 インデックスを一覧表示するには、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インデックスを更新するには、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インデックスをコレクションから削除するには 、mongocxx::search_index_viewインスタンスで drop_one() メソッドを呼び出し、削除するインデックスの名前を渡します。

次の例は、myDynamicIndex という名前の Atlas Searchインデックスを削除する方法を示しています。

siv.drop_one("myDynamicIndex");

インデックスを管理する方法を示す実行可能な例については、「 インデックスを使用したクエリの最適化 」を参照してください。

Atlas Search 機能の使用方法と Atlas Search インデックスの定義方法の詳細なガイドについては、次の Atlas Search ドキュメント ページを参照してください。

このガイドで説明されているメソッドの詳細については、次のAPIドキュメントを参照してください。

戻る

複合インデックス