Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

MongoDB Search e índices de búsqueda vectorial

En esta guía, puedes aprender a crear y gestionar índices de MongoDB Search y MongoDB Vector Search. Estos índices te permiten utilizar las siguientes funcionalidades:

  • MongoDB Search: Realiza búsquedas rápidas y completas de texto

  • MongoDB Vector Search: Realiza búsquedas semánticas (de similitud) en embeddings de vectores

Los índices de MongoDB Search y MongoDB Vector Search especifican qué campos indexar, cómo se indexan estos campos y establecen otras configuraciones opcionales.

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

Nota

Datos de muestra

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

Para crear un índice de búsqueda de MongoDB, primero se debe compilar una instancia de SearchIndexModel que establezca las especificaciones del índice. Para empezar a construir una instancia de 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 struct, incluido SearchIndexModel. Puedes usar el método builder() para construir una instancia de cada tipo encadenando métodos de opción builder.

El controlador de Rust proporciona los siguientes métodos de montaje de SearchIndexModel:

Método Builder
Parameter Type
Descripción

definition()

Document

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

name()

String

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

index_type()

SearchIndexType

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

Para saber más sobre los mapeos de campos de búsqueda en MongoDB Search, consulta Definir mapeos de campos en la documentación de Atlas.

Para obtener más información sobre cómo definir índices de MongoDB Vector Search, consulta Cómo crear índices de campos para 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 de SearchIndexModel para proporcionar especificaciones para un índice llamado vs_idx. El código especifica la ruta de incorporación como plot_embedding, indexa 1536 dimensiones y utiliza la función de similitud de vectores "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();

Puedes crear un índice MongoDB Search o un índice MongoDB Vector Search en una colección llamando al método create_search_index() en una instancia de Collection. Este método acepta un modelo de índice como parámetro, especificado en una instancia de 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 establece el nombre del índice y habilita el mapeo dinámico. Luego, el código pasa la instancia de SearchIndexModel al método create_search_index() para crear el MongoDB Search índice:

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"

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

Este ejemplo realiza las siguientes acciones:

  1. Crea una instancia SearchIndexModel que especifica un índice MongoDB Search llamado as_idx

  2. Crea una instancia de SearchIndexModel que especifica un índice de MongoDB Vector Search llamado vs_idx

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

  4. Crea los índices de búsqueda de MongoDB y MongoDB Vector Search 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"]

Puedes acceder a la información sobre los índices existentes de MongoDB Search y MongoDB Vector Search 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 MongoDB Search y MongoDB Vector Search creados en la sección Crear múltiples índices de búsqueda de esta página. El código llama al método list_search_indexes() e imprime una lista de los índices de MongoDB Search y MongoDB Vector Search 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 usando un cursor.

Puedes 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 que se actualizará

  • Documento de definición de índice modificado

El siguiente ejemplo actualiza el índice de Vector Search llamado 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 instruye al índice a utilizar "dotProduct" como la función vectorial de similitud. Luego, el código llama al método update_search_index() 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?;

Puedes borrar 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 a borrar 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 aprender sobre otros índices que puedes crear utilizando el driver de Rust, consulta la guía de Índices.

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

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

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

Volver

Indexes

En esta página