Atlas Search インデックス
Overview
このガイドでは、C ドライバーを使用して、Atlas Search および Atlas Vector Search インデックスをプログラムで管理する方法を学習できます。
Atlas Search 機能を使うと、Atlas でホストされているコレクションを全文検索できます。Atlas Search の詳細については、Atlas ドキュメントの「 Atlas Search の概要」を参照してください。
Atlas Vector Search を使用すると、MongoDB Atlas に保存されているベクトル埋め込みに対してセマンティック検索を実行できます。Atlas Vector Search の詳細については、Atlas ドキュメントの「Atlas Vector Search の概要」を参照してください。
次のセクションでは、Atlas Search インデックスおよび Atlas Vector Search インデックスの作成、一覧表示、更新、削除の方法を示すコード例を示します。
検索インデックスを作成
Atlas Search インデックスまたは Atlas Vector Search インデックスを作成するには、createSearchIndexes
コマンドを mongoc_collection_command_simple()
関数に渡します。このコマンドを使用して、1 つまたは複数のインデックスを作成することができます。
次のコード例は、Atlas Search インデックスの作成方法を示しています。
bson_t cmd; bson_error_t error; char *cmd_str = bson_strdup_printf ( BSON_STR ({ "createSearchIndexes" : "%s", "indexes" : [ {"definition" : {"mappings" : {"dynamic" : false}}, "name" : "<index name>"} ] }), "<collection name>"); bson_init_from_json (&cmd, cmd_str, -1, &error); bson_free (cmd_str); if (mongoc_collection_command_simple (collection, &cmd, NULL, NULL, &error)) { printf ("Successfully created search index\n"); } else { fprintf (stderr, "Failed to create search index: %s", error.message); } bson_destroy (&cmd);
次のコード例は、Atlas Vector Search インデックスを作成する方法を示しています。
bson_t cmd; bson_error_t error; char * cmd_str = bson_strdup_printf( BSON_STR({ "createSearchIndexes": "%s", "indexes": [{ "name": "<index name>", "type": "vectorSearch", "definition": { "fields": [{ "type": "vector", "path": "plot_embedding", "numDimensions": 1536, "similarity": "euclidean" }] } }] }), "<collection name>" ); bson_init_from_json(&cmd, cmd_str, -1, &error); bson_free(cmd_str); if (mongoc_collection_command_simple(collection, &cmd, NULL, NULL, &error)) { printf("Successfully created Vector Search index\n"); } else { fprintf(stderr, "Failed to create Vector Search index: %s", error.message); } bson_destroy(&cmd);
次のコード例は、mongoc_collection_command_simple()
関数を一度呼び出すことで、両方の検索インデックスを作成する方法を示しています。
bson_t cmd; bson_error_t error; char * cmd_str = bson_strdup_printf( BSON_STR({ "createSearchIndexes": "%s", "indexes": [{ "definition": { "mappings": { "dynamic": false } }, "name": "<Atlas Search index name>" }, { "name": "<Vector Search index name>", "type": "vectorSearch", "definition": { "fields": [{ "type": "vector", "path": "plot_embedding", "numDimensions": 1536, "similarity": "euclidean" }] } } ] }), "<collection name>"); bson_init_from_json(&cmd, cmd_str, -1, &error); bson_free(cmd_str); if (mongoc_collection_command_simple(collection, &cmd, NULL, NULL, &error)) { printf("Successfully created search indexes\n"); } else { fprintf(stderr, "Failed to create search indexes: %s", error.message); } bson_destroy(&cmd);
各検索インデックスを定義するために使用される構文について詳しく学ぶには、Atlas ドキュメントの次のガイドを参照してください。
検索インデックスをリストする
$listSearchIndexes
集計ステージを mongoc_collection_aggregate()
関数に渡すと、コレクション内のすべての Atlas Search インデックスおよび Atlas Vector Search インデックスを返すことができます。
次のコード例は、コレクション内の検索インデックスのリストを出力する方法を示しています。
bson_t pipeline; const bson_t *doc; bson_error_t error; const char *pipeline_str = BSON_STR ({"pipeline" : [ {"$listSearchIndexes" : {}} ]}); bson_init_from_json (&pipeline, pipeline_str, -1, &error); mongoc_cursor_t *cursor = mongoc_collection_aggregate (collection, MONGOC_QUERY_NONE, &pipeline, NULL, NULL); while (mongoc_cursor_next (cursor, &doc)) { char *str = bson_as_canonical_extended_json (doc, NULL); printf ("%s\n", str); bson_free (str); } bson_destroy (&pipeline); mongoc_cursor_destroy (cursor);
検索インデックスをアップデートする
updateSearchIndex
コマンドを mongoc_collection_command_simple()
関数に渡して、Atlas Search インデックスまたは Atlas Vector Search インデックスを更新することができます。
次のコードは、このガイドの「検索インデックスの作成」セクションで作成された Atlas Search インデックスを更新して、動的マッピングを使用する方法を示しています。
bson_t cmd; bson_error_t error; char *cmd_str = bson_strdup_printf ( BSON_STR ({ "updateSearchIndex" : "%s", "definition" : {"mappings" : {"dynamic" : true}}, "name" : "<index name>"}), "<collection name>"); bson_init_from_json (&cmd, cmd_str, -1, &error); bson_free (cmd_str); if (mongoc_collection_command_simple (collection, &cmd, NULL, NULL, &error)) { printf ("Successfully updated search index\n"); } else { fprintf (stderr, "Failed to create search index: %s", error.message); } bson_destroy (&cmd);
次のコードは、このガイドの「検索インデックスの作成」セクションで作成された Atlas Vector Search インデックスを更新して、cosine
類似度関数を使用する方法を示しています。
bson_t cmd; bson_error_t error; char * cmd_str = bson_strdup_printf( BSON_STR({ "updateSearchIndex": "%s", "name": "<index name>", "definition": { "fields": [{ "type": "vector", "path": "plot_embedding", "numDimensions": 1536, "similarity": "cosine" }] } }), "<collection name>" ); bson_init_from_json(&cmd, cmd_str, -1, &error); bson_free(cmd_str); if (mongoc_collection_command_simple(collection, &cmd, NULL, NULL, &error)) { printf("Successfully updated search index\n"); } else { fprintf(stderr, "Failed to create search index: %s", error.message); } bson_destroy(&cmd);
検索インデックスを削除する
dropSearchIndexes
コマンドを mongoc_collection_command_simple()
関数に渡すと、Atlas Search インデックスまたはAtlas Vector Search インデックスを削除できます。
次のコードは、コレクションから検索インデックスを削除する方法を示しています。
bson_t cmd; bson_error_t error; char *cmd_str = bson_strdup_printf ( BSON_STR ({ "dropSearchIndexes" : "%s", "index" : "<index name>" }), "<collection name>"); bson_init_from_json (&cmd, cmd_str, -1, &error); if (mongoc_collection_command_simple (collection, &cmd, NULL, NULL, &error)) { printf ("Successfully deleted search index\n"); } else { fprintf (stderr, "Failed to delete search index: %s", error.message); } bson_destroy (&cmd);
詳細情報
MongoDB Atlas Search の詳細については、Atlas ドキュメントの「Atlas Search インデックス」を参照してください。
MongoDB Atlas Vector Search の詳細については、Atlas ドキュメントの「Atlas Vector Search のフィールドにインデックスを作成する方法」を参照してください。
API ドキュメント
このガイドで説明されている関数の詳細については、次のAPIドキュメントを参照してください。