Overview
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.
Crear un modelo de índice de búsqueda
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 |
|---|---|---|
|
| 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. |
|
| Establece el nombre del índice. Si omite esta configuración, el controlador establece el nombre en |
|
| 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.
Modelos de ejemplo
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();
Crear un índice de búsqueda
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.
Ejemplo
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"
Crear múltiples índices de búsqueda
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.
Ejemplo
Este ejemplo realiza las siguientes acciones:
Crea una instancia
SearchIndexModelque especifica un índice de búsqueda de MongoDB llamadoas_idxCrea una instancia de
SearchIndexModelque especifica un índice de MongoDB Vector Search llamadovs_idxPasa un
vecde ambasSearchIndexModelinstancias al métodocreate_search_indexes()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"]
Índices de búsqueda de listas
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.
Ejemplo
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.
Actualizar un índice de búsqueda
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
Ejemplo
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?;
Eliminar un índice de búsqueda
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.
Ejemplo
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?;
Información Adicional
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:
Documentación de la API
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: