Docs 菜单
Docs 主页
/ /

MongoDB搜索索引

在本指南中,您可以学习;了解如何使用C驾驶员以编程方式管理MongoDB Search 和MongoDB Vector Search 索引。

MongoDB搜索功能使您能够对MongoDB Atlas上托管的集合执行全文搜索。要学习;了解有关MongoDB Search 的更多信息,请参阅Atlas文档中的 MongoDB Search 概述。

MongoDB Vector Search 使您能够对存储在MongoDB Atlas中的向量嵌入执行语义搜索。要学习;了解有关MongoDB Vector Search 的更多信息,请参阅Atlas文档中的MongoDB Vector Search 概述。

以下部分提供的代码示例演示了如何创建、列出、更新和删除MongoDB Search 和MongoDB Vector Search 索引。

要创建MongoDB Search 或MongoDB Vector Search索引,请将 createSearchIndexes 命令传递给 mongoc_collection_command_simple() 函数。您可以使用此命令创建一个或多个索引。

以下代码示例展示了如何创建MongoDB 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);

以下代码示例展示了如何创建MongoDB 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": "<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 Search 或MongoDB Vector Search索引。

以下代码显示如何更新在本指南的“创建搜索索引”部分中创建的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 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() 函数以删除MongoDB Search 或MongoDB 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 Search 的更多信息,请参阅Atlas文档中的MongoDB Search 索引。

要学习;了解有关MongoDB Vector Search 的更多信息,请参阅Atlas文档中的如何为MongoDB Vector Search 的字段编制索引。

要学习;了解有关本指南中讨论的任何函数的更多信息,请参阅以下API文档:

后退

Multikey Indexes

在此页面上