Overview
La Búsqueda Vectorial de MongoDB permite realizar búsquedas semánticas en incrustaciones vectoriales almacenadas en MongoDB Atlas. Antes de realizar consultas de Búsqueda Vectorial de MongoDB, debe crear índices que especifiquen qué campos indexar y cómo hacerlo.
Para obtener más información sobre MongoDB Vector Search, consulte Descripción general de la búsquedavectorial de MongoDB en la documentación de la búsqueda vectorial de MongoDB.
Datos de muestra
Los ejemplos de esta guía utilizan el movies Colección en la base de datos sample_mflix de los conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulte la guía de introducción de MongoDB.
Para administrar los índices de búsqueda vectorial de MongoDB en la colección sample_mflix desde su aplicación C++, primero cree una instancia de mongocxx::client que se conecte a un clúster Atlas y asigne los siguientes valores a sus variables db y collection:
auto db = client["sample_mflix"]; auto collection = db["movies"];
Luego, llama al método search_indexes() en tu variable collection para instanciar un mongocxx::search_index_view en tu colección:
auto siv = collection.search_indexes();
La clase mongocxx::search_index_view contiene las siguientes funciones miembro que le permiten interactuar con los índices de búsqueda vectorial de MongoDB:
create_one():Crea un índice de búsqueda vectorial de MongoDB con la configuración especificadalist(): Devuelve un objetomongocxx::cursorque apunta a una lista de índices de búsqueda vectorial y de búsqueda de MongoDB en la colecciónupdate_one(): Actualiza la definición del índice de búsqueda vectorial de MongoDB especificadodrop_one(): Elimina el índice especificado de la colección
Las siguientes secciones proporcionan ejemplos de código que demuestran cómo utilizar cada método de administración de índice de búsqueda vectorial de MongoDB.
Nota
La gestión del índice de búsqueda vectorial de MongoDB es asincrónica
El controlador C++ de MongoDB gestiona los índices de búsqueda vectorial de MongoDB de forma asíncrona. Los métodos de la biblioteca descritos en las siguientes secciones devuelven la respuesta del servidor inmediatamente, pero los cambios en los índices de búsqueda vectorial de MongoDB se realizan en segundo plano y podrían no completarse hasta más tarde.
Cree un índice de búsqueda vectorial de MongoDB
Para crear un único índice de búsqueda vectorial de MongoDB en una colección, llame al método create_one() en un objeto mongocxx::search_index_view y pase un objeto mongocxx::search_index_model que especifique el índice que desea crear.
El constructor mongocxx::search_index_model requiere los siguientes argumentos:
name: String que especifica el nombre del índicedefinition:Documento que especifica cómo configurar los campos en su índice
Tip
Para obtener una lista completa de los campos que puede configurar en un índice de búsqueda vectorial de MongoDB, consulte la sección de referencia Campos del índice de búsqueda vectorial de MongoDB en la documentación de Búsqueda vectorial de MongoDB.
El siguiente ejemplo muestra cómo crear un único índice de búsqueda vectorial de MongoDB:
// Define the index model with an index name and a definition document auto model = mongocxx::search_index_model( "<vectorSearchIndexName>", make_document( kvp("fields", make_array(make_document( kvp("type", "vector"), kvp("path", "<fieldName>"), kvp("numDimensions", 2048), kvp("similarity", "dotProduct"), kvp("quantization", "scalar")))))); model.type("vectorSearch"); // Creates the vector search index auto result = siv.create_one(model); std::cout << "New vector search index name: " << result << std::endl;
New vector search index name: vector_search
El índice de búsqueda vectorial tiene la siguiente definición:
type:El tipo del índice esvectorSearch.path:El índice está en el campoplot_embedding_voyage_3_large.numDimensions:El número de dimensiones en las incrustaciones vectoriales es2048.similarity:El índice mide la similitud utilizando la similituddotProduct.quantization:El índice utiliza la cuantificaciónscalar.
Lista de índices de búsqueda vectorial de MongoDB
Para listar todos los índices de búsqueda de una colección, llame al método list() en un objeto mongocxx::search_index_view. Este método devuelve un objeto mongocxx::cursor que puede usar para iterar sobre los índices de MongoDB Vector Search y MongoDB Search de la colección.
El siguiente ejemplo imprime una lista de índices de búsqueda disponibles en la colección especificada:
auto cursor = siv.list(); for (auto const& doc : siv.list()) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "id" : ..., "name" : "vector_index", "type" : "vectorSearch", ..., "latestDefinition" : { "fields" : [ { "type" : "vector", "path" : "plot_embedding_voyage_3_large", "numDimensions" : 2048, ...}
Como alternativa, puede listar un índice individual de MongoDB Vector Search pasando el nombre del índice al método list(). Esto devuelve un objeto mongocxx::cursor que apunta a un conjunto de resultados que contiene únicamente el índice especificado.
El siguiente ejemplo utiliza el método list() para devolver el índice con el nombre vector_index:
for (auto const& doc : siv.list("vector_index")) { std::cout << bsoncxx::to_json(doc) << std::endl; }
{ "id" : ..., "name" : "vector_index", "type" : "vectorSearch", ..., "latestDefinition" : { "fields" : [ { "type" : "vector", "path" : "plot_embedding_voyage_3_large", "numDimensions" : 2048, ...}
Actualizar un índice de búsqueda vectorial de MongoDB
Para actualizar un índice de búsqueda vectorial de MongoDB, llame al método update_one() en un objeto mongocxx::search_index_view y pase el nombre del índice que desea actualizar y la definición a la que actualizar el índice.
El siguiente ejemplo muestra cómo actualizar el índice de búsqueda vectorial de MongoDB existente del ejemplo anterior Crear un índice de búsqueda vectorial de MongoDB para usar euclidean la dotProduct similitud en binary lugar de y la scalar cuantificación en lugar de:
auto definition = make_document( kvp("fields", make_array(make_document( kvp("type", "vector"), kvp("path", "plot_embedding_voyage_3_large"), kvp("numDimensions", 2048), kvp("similarity", "euclidean"), kvp("quantization", "binary"))))); siv.update_one("vector_index", definition.view());
Eliminar un índice de búsqueda vectorial de MongoDB
Para eliminar un índice de búsqueda vectorial MongoDB de una colección, llame al método drop_one() en un objeto mongocxx::search_index_view y pase el nombre del índice que desea eliminar.
El siguiente ejemplo muestra cómo eliminar un índice de búsqueda vectorial de MongoDB llamado vector_index:
siv.drop_one("vector_index");
Información Adicional
Para obtener una aplicación de ejemplo que demuestra cómo administrar índices en el controlador C++, consulte la Guíade índices.
Para obtener guías más detalladas sobre cómo utilizar la función de búsqueda vectorial de MongoDB y definir índices de búsqueda vectorial de MongoDB, consulte las siguientes páginas de documentación de búsqueda vectorial de MongoDB:
Documentación de la API
Para obtener más información sobre los métodos analizados en esta guía, consulte la siguiente documentación de API: