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 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 en esta guía utilizan la colección embedded_movies en la base de datos sample_mflix, 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.
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 Builder | Parameter Type | Descripción |
|---|---|---|
|
| 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. |
|
| 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 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);
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 MongoDB Search 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 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);
listSearchIndexes
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.
Ejemplo
The following example accesses information about the MongoDB Search and MongoDB Vector Search indexes created in the Create Multiple Search Indexes section of this page. The code calls the list_search_indexes() method and prints a list of the MongoDB Search and MongoDB Vector Search indexes on the collection:
let mut cursor = my_coll.list_search_indexes().await?; while let Some(index) = cursor.try_next().await? { println!("{}\n", index); }
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
The following example updates the Vector Search index named vs_index created in the Create Multiple Search Indexes section of this page. The code creates a new index definition document that instructs the index to use "dotProduct" as the vector similarity function. Then, the code calls the update_search_index() method to update the index:
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
The following example deletes the MongoDB Search index named example_index created in the Create a Search Index section of this page. The code passes the index name to the delete_search_index() method to delete the index:
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, consulta 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: