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
/ /

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

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 de búsqueda de MongoDB 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 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 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, consulte 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