Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Índices de MongoDB Vector Search

MongoDB Vector Search permite realizar búsquedas semánticas en incrustaciones vectoriales almacenadas en MongoDB Atlas. Antes de que puedas realizar consultas de MongoDB Vector Search, debes crear índices que especifiquen qué campos se van a indexar y cómo se indexan.

Para obtener más información sobre MongoDB Vector Search, consulta la Descripción general de MongoDB Vector Search en la documentación de MongoDB Vector Search.

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 gestionar los índices de búsqueda Vector de MongoDB en la colección sample_mflix desde su aplicación C++, primero instancie un mongocxx::client que 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 de miembro que le permiten interactuar con los índices de MongoDB Vector Search:

  • create_one()Crea un índice MongoDB Vector Search 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 MongoDB Vector Search de manera asíncrona. Los métodos de librería descritos en las siguientes secciones devuelven la respuesta del servidor inmediatamente, pero los cambios en tus índices de MongoDB Vector Search se realizan en segundo plano y pueden tardar algún tiempo en completarse.

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

  • definitionDocumento que especifica cómo configurar los campos en tu índice

Tip

Para obtener una lista completa de los campos que puedes configurar en un índice de MongoDB Vector Search, consulta la sección de referencia Campos del índice de búsqueda vectorial de MongoDB en la documentación de MongoDB Vector Search.

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.

  • numDimensionsEl número de dimensiones en los embeddings vectoriales es 2048.

  • similarity: el índice mide la similitud usando la similitud dotProduct.

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

Para enumerar todos los índices de búsqueda en una colección, llama al método list() en un objeto mongocxx::search_index_view. Este método devuelve un objeto mongocxx::cursor que puede utilizar 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 MongoDB Vector Search, debes llamar al método update_one() en un objeto mongocxx::search_index_view y pasar el nombre del índice que deseas actualizar junto con la definición a la que deseas actualizar dicho índice .

El siguiente ejemplo muestra cómo actualizar el índice existente de MongoDB Vector Search del ejemplo Crear un índice de búsqueda vectorial de MongoDB anterior para usar euclidean en lugar de dotProduct de similitud y binary en lugar de scalar cuantización:

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 remover un índice Vector Search de MongoDB de una colección, llama al método drop_one() en un objeto mongocxx::search_index_view y pasa el nombre del índice que deseas remover.

El siguiente ejemplo muestra cómo remover un índice de búsqueda vectorial de MongoDB llamado vector_index:

siv.drop_one("vector_index");

Para una aplicación de muestra que demuestra cómo gestionar índices en el controlador C++, consulta la Indexes guide.

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