Docs Menu
Docs Home
/ /

Índices de búsqueda vectorial y de búsqueda de MongoDB

En esta guía, aprenderá a crear y administrar índices de búsqueda MongoDB y de búsqueda vectorial MongoDB. Estos índices le permiten utilizar las siguientes funciones:

  • Búsqueda en MongoDB: Realice búsquedas rápidas de texto completo

  • Búsqueda de vectores de MongoDB: realice búsquedas semánticas (de similitud) en incrustaciones de vectores

Los índices de búsqueda de MongoDB y búsqueda vectorial de MongoDB especifican qué campos indexar, especifican cómo se indexan estos campos y establecen otras configuraciones opcionales.

Esta guía explica cómo realizar las siguientes acciones para administrar sus índices MongoDB Search y MongoDB Vector Search:

Nota

Datos de muestra

Los ejemplos de esta guía utilizan el embedded_movies Colección en la sample_mflix base de datos, que es uno de los conjuntos de datos de muestra de Atlas. Para obtener instrucciones sobre cómo importar los datos de muestra de Atlas, consulte "Cargar datos de muestra" en la documentación de Atlas.

Para crear un índice de búsqueda de MongoDB, primero debe crear una instancia SearchIndexModel que defina las especificaciones del índice. Para empezar a crear una instancia SearchIndexModel, llame al método SearchIndexModel::builder().

Nota

Instancia de modelos

El controlador de Rust implementa el patrón de diseño Builder para la creación de algunos tipos de estructura, incluido SearchIndexModel. Puedes usar el método builder() para construir una instancia de cada tipo encadenando los métodos de construcción de opciones.

El controlador Rust proporciona los siguientes métodos de construcción SearchIndexModel:

Método del constructor
Parameter Type
Descripción

definition()

Document

Especifica la definición del índice. Si se omite esta configuración, el controlador crea un índice de búsqueda de MongoDB con asignaciones dinámicas.

name()

String

Establece el nombre del índice. Si se omite esta configuración, el controlador establece el nombre en default.

index_type()

SearchIndexType

Establece el tipo de índice. Si se omite esta configuración, el controlador crea un índice de búsqueda de MongoDB de forma predeterminada.

Para obtener más información sobre las asignaciones de campos de búsqueda de MongoDB, consulte Definir asignaciones de campos en la documentación de Atlas.

Para obtener más información sobre cómo definir índices de búsqueda vectorial de MongoDB, consulte Cómo indexar campos para la búsqueda vectorial en la documentación de Atlas.

El siguiente ejemplo crea una instancia SearchIndexModel para proporcionar especificaciones para un índice denominado search_idx. El código especifica asignaciones estáticas de los campos title y released:

let def = doc! { "mappings": doc! {
"dynamic": false,
"fields": {
"title": {"type": "string"},
"released": {"type": "date"}
}
}};
let idx_model = SearchIndexModel::builder()
.definition(def)
.name("search_idx".to_string())
.index_type(SearchIndexType::Search)
.build();

El siguiente ejemplo crea una instancia SearchIndexModel para proporcionar especificaciones para un índice llamado vs_idx. El código especifica la ruta de inserción como plot_embedding, indexa 1536 dimensiones y utiliza la función de similitud vectorial "euclidean":

let def = doc! {
"fields": [{
"type": "vector",
"path": "plot_embedding",
"numDimensions": 1536,
"similarity": "euclidean",
}]
};
let idx_model = SearchIndexModel::builder()
.definition(def)
.name("vs_idx".to_string())
.index_type(SearchIndexType::VectorSearch)
.build();

Puede crear un índice de búsqueda MongoDB o de búsqueda vectorial MongoDB en una colección llamando al método create_search_index() en una instancia Collection. Este método acepta un modelo de índice como parámetro, especificado en una instancia SearchIndexModel.

El siguiente ejemplo crea un índice de búsqueda de MongoDB en la colección embedded_movies. El código crea un SearchIndexModel que define el nombre del índice y habilita la asignación dinámica. A continuación, el código pasa la instancia SearchIndexModel al método create_search_index() para crear el índice de búsqueda de MongoDB:

let idx_model = SearchIndexModel::builder()
.definition(doc! { "mappings": doc! {"dynamic": true} })
.name("example_index".to_string())
.build();
let result = my_coll.create_search_index(idx_model).await?;
println!("Created MongoDB Search index:\n{}", result);
Created MongoDB Search index:
"example_index"

Puede crear varios índices de búsqueda y búsqueda vectorial de MongoDB llamando al método create_search_indexes() en una instancia Collection. Este método acepta un vector de SearchIndexModel instancias como parámetro.

Este ejemplo realiza las siguientes acciones:

  1. Crea una instancia SearchIndexModel que especifica un índice de búsqueda de MongoDB llamado as_idx

  2. Crea una instancia SearchIndexModel que especifica un índice de búsqueda vectorial de MongoDB llamado vs_idx

  3. Pasa un vec de ambas instancias SearchIndexModel al método create_search_indexes()

  4. Crea los índices de búsqueda de MongoDB y búsqueda vectorial de MongoDB en la colección embedded_movies

let as_idx = SearchIndexModel::builder()
.definition(doc! { "mappings": doc! {"dynamic": true} })
.name("as_idx".to_string())
.build();
let vs_idx = SearchIndexModel::builder()
.definition(doc! {
"fields": [{
"type": "vector",
"path": "plot_embedding",
"numDimensions": 1536,
"similarity": "euclidean",
}]
})
.name("vs_idx".to_string())
.index_type(SearchIndexType::VectorSearch)
.build();
let models = vec![as_idx, vs_idx];
let result = my_coll.create_search_indexes(models).await?;
println!("Created indexes:\n{:?}", result);
Created MongoDB Search indexes:
["as_idx", "vs_idx"]

Puede acceder a información sobre los índices MongoDB Search y MongoDB Vector Search existentes de una colección llamando al método list_search_indexes() en la colección.

El siguiente ejemplo accede a información sobre los índices de búsqueda y búsqueda vectorial de MongoDB creados en la sección "Crear varios índices de búsqueda" de esta página. El código llama al list_search_indexes() método e imprime una lista de los índices de búsqueda y búsqueda vectorial de MongoDB en la colección:

let mut cursor = my_coll.list_search_indexes().await?;
while let Some(index) = cursor.try_next().await? {
println!("{}\n", index);
}
{ "id": "...", "name": "as_idx", "status": "READY", "queryable":
true, "latestDefinitionVersion": {...}, "latestDefinition": {
"mappings": { "dynamic": true } }, "statusDetail": [...] }
{ "id": "...", "name": "vs_idx", "type": "vectorSearch", "status":
"READY", "queryable": true, ..., "latestDefinition": { "fields": [{
"type": "vector", "path": "plot_embedding", "numDimensions": 1536,
"similarity": "euclidean" }] }, "statusDetail": [...] }

Tip

Para obtener más información sobre cómo iterar a través de un cursor, consulte la guía Acceder a datos mediante el uso de un cursor.

Puede actualizar un índice de MongoDB Search o MongoDB Vector Search llamando al método update_search_index() en una instancia Collection. Este método acepta los siguientes parámetros:

  • Nombre del índice a actualizar

  • Documento de definición de índice modificado

El siguiente ejemplo actualiza el índice de búsqueda vectorial,vs_index creado en la sección "Crear múltiples índices de búsqueda" de esta página. El código crea un nuevo documento de definición de índice que le indica que use "dotProduct" como función de similitud vectorial. A continuación, el código llama al update_search_index() método para actualizar el índice:

let name = "vs_index";
let updated_def = doc! {
"fields": [{
"type": "vector",
"path": "plot_embedding",
"numDimensions": 1536,
"similarity": "dotProduct",
}]
};
my_coll.update_search_index(name, updated_def).await?;

Puede eliminar un índice de MongoDB Search o MongoDB Vector Search llamando al método delete_search_index() en una instancia Collection. Este método acepta el nombre del índice que se va a eliminar como parámetro.

El siguiente ejemplo borra el índice de MongoDB Search llamado example_index creado en la sección Crear un índice de búsqueda de esta página. El código pasa el nombre del índice al método delete_search_index() para borrar el índice:

let name = "example_index";
my_coll.drop_search_index(name).await?;

Para obtener más información sobre otros índices que puede crear utilizando el controlador Rust, consulte la guía de índices.

Para obtener más información sobre MongoDB Search, consulte la siguiente documentación de Atlas:

Para obtener más información sobre MongoDB Vector Search, consulte la siguiente documentación de Atlas:

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

Volver

Indexes

En esta página