Atlas Search 索引
Overview
在本指南中,您将学习如何使用 C 驱动程序以编程方式管理 Atlas Search 和 Atlas Vector Search 索引。
Atlas Search 功能使您能够对 MongoDB Atlas 上托管的集合执行全文搜索。要了解有关 Atlas Search 的更多信息,请参阅 Atlas 文档中的 Atlas Search 概述。
Atlas Vector Search 使您能够对存储在 MongoDB Atlas 中的向量嵌入执行语义搜索。要了解有关 Atlas Vector Search 的更多信息,请参阅 Atlas 文档中的 Atlas Vector Search 概述。
以下各部分提供代码示例,演示如何创建、列出、更新和删除 Atlas Search 和 Vector Search 索引。
创建搜索索引
要创建 Atlas Search 或 Vector Search 索引,请将 createSearchIndexes
命令传递给 mongoc_collection_command_simple()
函数。您可以使用此命令创建一个或多个索引。
以下代码示例展示了如何创建 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 和 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 或 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 或 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 文档中的如何为 Vector Search 索引字段。
API 文档
要学习;了解有关本指南中讨论的任何函数的更多信息,请参阅以下API文档: