Overview
En esta guía, puede aprender a administrar mediante programación sus índices MongoDB Search y MongoDB Vector Search mediante el controlador C.
La función de búsqueda de MongoDB permite realizar búsquedas de texto completo en colecciones alojadas en MongoDB Atlas. Para obtener más información sobre la búsqueda de MongoDB, consulte Descripción general de la búsqueda de MongoDB en la documentación de Atlas.
La Búsqueda Vectorial de MongoDB permite realizar búsquedas semánticas en incrustaciones vectoriales almacenadas en MongoDB Atlas. Para obtener más información sobre la Búsqueda Vectorial de MongoDB, consulte la Descripción General de la Búsqueda Vectorial de MongoDB en la documentación de Atlas.
Las siguientes secciones proporcionan ejemplos de código que demuestran cómo crear, enumerar, actualizar y eliminar índices de MongoDB Search y MongoDB Vector Search.
Crear un índice de búsqueda
Para crear un índice de búsqueda MongoDB o de búsqueda vectorial MongoDB, pase el createSearchIndexes
Comando para la función mongoc_collection_command_simple(). Puede usar este comando para crear uno o varios índices.
El siguiente ejemplo de código muestra cómo crear un índice de búsqueda de 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);
El siguiente ejemplo de código muestra cómo crear un índice de búsqueda vectorial de 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);
El siguiente ejemplo de código muestra cómo crear ambos índices de búsqueda en una llamada a la función 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);
Para obtener más información sobre la sintaxis utilizada para definir cada índice de búsqueda, consulte las siguientes guías en la documentación de Atlas:
Índices de búsqueda de listas
Puede pasar la etapa de agregación $listSearchIndexes a la función mongoc_collection_aggregate() para devolver todos los índices MongoDB Search y MongoDB Vector Search en una colección.
El siguiente ejemplo de código muestra cómo imprimir una lista de los índices de búsqueda en una colección:
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);
Actualizar un índice de búsqueda
Puede pasar el comando updateSearchIndex a la función mongoc_collection_command_simple() para actualizar un índice de búsqueda MongoDB o de búsqueda vectorial MongoDB.
El siguiente código muestra cómo actualizar el índice de búsqueda de MongoDB creado en la sección Crear un índice de búsqueda de esta guía para usar asignaciones dinámicas:
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);
El siguiente código muestra cómo actualizar el índice de búsqueda vectorial de MongoDB creado en la sección Crear un índice de búsqueda de esta guía para usar la cosine función de similitud:
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);
Eliminar un índice de búsqueda
Puede pasar el comando dropSearchIndexes a la función mongoc_collection_command_simple() para eliminar un índice de búsqueda MongoDB o de búsqueda vectorial MongoDB.
El siguiente código muestra cómo eliminar un índice de búsqueda de una colección:
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);
Información Adicional
Para obtener más información sobre MongoDB Search, consulte Índices de búsqueda de MongoDB en la documentación de Atlas.
Para obtener más información sobre MongoDB Vector Search, consulte Cómo indexar campos para MongoDB Vector Search en la documentación de Atlas.
Documentación de la API
Para aprender más sobre alguna de las funciones tratadas en esta guía, consulta la siguiente documentación de la API: