Overview
このガイドでは、Cドライバーを使用してMongoDB SearchおよびMongoDBベクトル検索の検索インデックスをプログラムで管理する方法を学ぶことができます。
MongoDB Search 機能を使用すると、MongoDB Atlasでホストされているコレクションに対して全文検索を実行できます。MongoDB Search の詳細については、Atlas ドキュメントのMongoDB 検索 概要を参照してください。
MongoDB ベクトル検索を使用すると、MongoDB Atlasに保存されているベクトル埋め込みに対してセマンティック検索を実行できます。MongoDB ベクトル検索の詳細については、Atlas ドキュメントのMongoDB ベクトル検索の概要を参照してください。
次のセクションでは、 MongoDB Search およびMongoDB ベクトル検索インデックスを作成、一覧表示、更新、削除する方法を示すコード例を示します。
検索インデックスを作成
MongoDB Search または MongoDB ベクトル検索インデックスを作成するには、createSearchIndexes コマンドを mongoc_collection_command_simple() 関数に渡します。このコマンドを使用して、1 つまたは複数のインデックスを作成できます。
次のコード例は、MongoDB検索インデックスの作成方法を示しています。
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);
次のコード例は、 MongoDB ベクトル検索インデックスの作成方法を示しています。
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": "<MongoDB 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() 関数に渡すと、コレクション内のすべてのMongoDB SearchおよびMongoDB 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() 関数に渡して、MongoDB 検索する または MongoDB ベクトル検索インデックスを更新できます。
次のコードは、このガイドの検索インデックスの作成セクションで作成されたMongoDB検索インデックスを更新して、動的マッピングを使用する方法を示しています。
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);
次のコードは、このガイドの検索インデックスの作成セクションで作成されたMongoDBベクトル検索インデックスを更新して、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);
検索インデックスを削除する
MongoDB 検索またはMongoDB ベクトル検索インデックスを削除するには、dropSearchIndexes コマンドを mongoc_collection_command_simple() 関数に渡します。
次のコードは、コレクションから検索インデックスを削除する方法を示しています。
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 Search の詳細については、Atlas ドキュメントのMongoDB 検索インデックスを参照してください。
MongoDB ベクトル検索の詳細については、Atlas ドキュメントのMongoDB ベクトル検索のフィールドにインデックスを作成する方法を参照してください。
API ドキュメント
このガイドで説明されている関数の詳細については、次のAPIドキュメントを参照してください。