Docs Menu
Docs Home
/ /

Índices de búsqueda vectorial de MongoDB

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.

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 especificada

  • list(): Devuelve un objeto mongocxx::cursor que apunta a una lista de índices de búsqueda vectorial y de búsqueda de MongoDB en la colección

  • update_one(): Actualiza la definición del índice de búsqueda vectorial de MongoDB especificado

  • drop_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.

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 índice

  • definition: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 es vectorSearch.

  • path:El índice está en el campo plot_embedding_voyage_3_large.

  • numDimensions:El número de dimensiones en las incrustaciones vectoriales es 2048.

  • similarity:El índice mide la similitud utilizando la similitud dotProduct.

  • quantization:El índice utiliza la cuantificación scalar.

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, ...}

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());

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");

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:

Para obtener más información sobre los métodos analizados en esta guía, consulte la siguiente documentación de API:

Volver

Índices de búsqueda de MongoDB

En esta página