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 de texto completo
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.
Nota
Los métodos de gestión de índices de MongoDB Search se ejecutan de forma asíncrona. Los métodos del controlador pueden devolver un resultado antes de que la acción deseada se complete en el servidor.
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.
Crear un modelo de índice de búsqueda
Las siguientes secciones describen cómo crear modelos de índice para los índices de MongoDB Search y MongoDB Vector Search.
Modelo de MongoDB Search índice
Para crear un índice de búsqueda de MongoDB, debes construir una instancia de CreateSearchIndexModel que establezca las especificaciones de tu índice.
La clase CreateSearchIndexModel tiene las siguientes propiedades:
Propiedad | Tipo | 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. |
El siguiente ejemplo crea una instancia CreateSearchIndexModel para proporcionar especificaciones para un índice denominado search_idx. El código especifica asignaciones estáticas de los campos title y released:
var def = new BsonDocument { { "mappings", new BsonDocument { { "dynamic", false }, { "fields", new BsonDocument { { "title", new BsonDocument { {"type", "string" } } }, { "released", new BsonDocument { { "type", "date" } } } } } } } }; var indexModel = new CreateSearchIndexModel( "search_idx", SearchIndexType.Search, def );
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.
Modelo de MongoDB Vector Search índice
Para crear un índice de búsqueda vectorial en MongoDB Vector Search, debes crear una instancia de CreateVectorSearchIndexModel que establezca las especificaciones de tu índice.
La clase CreateVectorSearchIndexModel hereda de la clase CreateSearchIndexModel y tiene las siguientes propiedades adicionales:
Propiedad | Tipo | Descripción |
|---|---|---|
|
| Especifica el campo que contiene los vectores a indexar. |
|
| Establece la función de similitud de vectores que se utilizará para buscar a los K vecinos más cercanos. |
|
| Especifica el número de dimensiones que la búsqueda aplica en el momento de indexación y en la query. |
|
| Especifica los campos que la búsqueda utiliza como filtros en la query vectorial. |
|
| Especifica el tipo de cuantización automática de vectores para los vectores de búsqueda. Si no se establece esta propiedad, la búsqueda no utiliza cuantificación automática. |
|
| Configura el número máximo de aristas que un nodo puede tener en el grafo Jerárquico de Mundos Navegables Pequeños. |
|
| Establece el número máximo de nodos a evaluar para encontrar los vecinos más cercanos para conectarse a un nuevo nodo. |
|
| Especifica los campos que se deben almacenar en el índice. MongoDB Vector Search solo devuelve estos campos cuando configuras |
|
| Especifica los campos que se excluirán de ser almacenados en el índice. MongoDB Vector Search almacena todos los demás campos. Cuando estableces |
El siguiente ejemplo crea una instancia de CreateVectorSearchIndexModel para proporcionar especificaciones para un índice llamado vs_idx. El código especifica la ruta de incrustación como PlotEmbedding, una propiedad de clase que corresponde al campo plot_embedding en MongoDB. También indexa 1536 dimensiones y utiliza la función de similitud vectorial Euclidean.
var model = new CreateVectorSearchIndexModel<Movie> ( model => model.PlotEmbedding, "vs_idx", VectorSimilarity.Euclidean, 1536);
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.
Modelo de índice de búsqueda con auto-embebido de MongoDB
Puedes utilizar un modelo de índices CreateAutoEmbeddingVectorSearchIndexModel para crear un índice de MongoDB Vector Search que automáticamente genere incrustaciones de vectores para los campos de texto.
El CreateAutoEmbeddingVectorSearchIndexModel tiene las siguientes propiedades:
Propiedad | Tipo | Descripción |
|---|---|---|
|
| Especifica el nombre del modelo de embedding que se utilizará para generar embeddings vectoriales. Para obtener una lista de los modelos compatibles, consulte Incrustaciones de texto en la documentación de VoyageAI. |
|
| Especifica el tipo de dato a insertar. Actualmente, la única modalidad admitida es |
|
| Establece la función de similitud de vectores para buscar a los principales vecinos más cercanos de K. Si no configuras esta propiedad, el valor por defecto depende de |
|
| Especifica el número de dimensiones de salida para el modelo de representación. Si no estableces esta propiedad, el driver utiliza las dimensiones por defecto del modelo de integración. |
|
| Especifica el tipo de cuantización automática de vectores para los vectores de búsqueda. Si no se establece esta propiedad, la búsqueda no utiliza cuantificación automática. |
|
| Establece el número máximo de aristas que un nodo puede tener en el grafo Hierarchical Navigable Small Worlds (HNSW). El valor por defecto es |
|
| Establece el número máximo de nodos a evaluar al buscar los vecinos más cercanos para conectar a un nuevo nodo. El valor por defecto es |
El siguiente ejemplo crea una instancia de CreateAutoEmbeddingVectorSearchIndexModel que proporciona especificaciones para un índice denominado auto_embedded_index. Este índice utiliza el modelo de embedding "voyage-4" para generar automáticamente embeddings vectoriales para el campo plot, e incluye también filtros opcionales para los campos runtime y year:
var model = new CreateAutoEmbeddingVectorSearchIndexModel<EmbeddedMovie>( m => m.Plot, "auto_embedding_index", "voyage-4", m => m.Runtime, m => m.Year // Optional filter fields );
Crear un índice de búsqueda
Puedes crear un índice de MongoDB Search o MongoDB Vector Search en una colección llamando al método SearchIndexes.CreateOne() en una instancia IMongoCollection. Este método acepta un modelo de índice como parámetro, especificado en una instancia de CreateSearchIndexModel o CreateVectorSearchIndexModel.
Ejemplo
El siguiente ejemplo crea un índice de búsqueda de MongoDB en la colección embedded_movies. El código crea un CreateSearchIndexModel que establece el nombre del índice y habilita el mapeo dinámico. Luego, el código pasa la instancia de CreateSearchIndexModel al método SearchIndexes.CreateOne() para crear el MongoDB Search índice:
var indexModel = new CreateSearchIndexModel( "example_index", SearchIndexType.Search, new BsonDocument { { "mappings", new BsonDocument { { "dynamic", true }, } } } ); var result = movieCollection.SearchIndexes.CreateOne(indexModel); Console.WriteLine("Created MongoDB Search index:\n{0}", result);
Created MongoDB Search index: "example_index"
Crear múltiples índices de búsqueda
Puedes crear varios índices de MongoDB Search y MongoDB Vector Search llamando al método SearchIndexes.CreateMany() en una instancia IMongoCollection. Este método acepta un IEnumerable de instancias CreateSearchIndexModel o CreateVectorSearchIndexModel como parámetro.
Ejemplo
Este ejemplo realiza las siguientes acciones:
Crea una instancia
CreateSearchIndexModelque especifica un índice MongoDB Search llamadoas_idxCrea una instancia de
CreateVectorSearchIndexModelque especifica un índice de MongoDB Vector Search llamadovs_idxPasa un
Listde las instanciasCreateSearchIndexModelyCreateVectorSearchIndexModelal métodoSearchIndexes.CreateMany()Crea los índices de búsqueda de MongoDB y MongoDB Vector Search en la colección
embedded_movies
var searchModel = new CreateSearchIndexModel( "as_idx", SearchIndexType.Search, new BsonDocument { { "mappings", new BsonDocument { { "dynamic", true }, } } } ); var vectorModel = new CreateVectorSearchIndexModel<Movie>( m => m.PlotEmbedding, "vs_idx", VectorSimilarity.Euclidean, 1536); var models = new List<CreateSearchIndexModel> { searchModel, vectorModel }; var indexes = movieCollection.SearchIndexes.CreateMany(models); Console.WriteLine("Created Search indexes:\n{0} {1}", indexes.ToArray());
Created Search indexes: as_idx vs_idx
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 SearchIndexes.List() 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 SearchIndexes.List() e imprime una lista de los índices de MongoDB Search y MongoDB Vector Search en la colección:
var indexesList = movieCollection.SearchIndexes.List().ToList(); foreach (var i in indexesList) { Console.WriteLine(i); }
{ "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": [...] }
Actualizar un índice de búsqueda
Puedes actualizar un índice de MongoDB Search o MongoDB Vector Search llamando al método SearchIndexes.Update() en una instancia de IMongoCollection. 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 SearchIndexes.Update() para actualizar el índice:
var updatedDef = new BsonDocument { { "fields", new BsonArray { new BsonDocument { { "type", "vector" }, { "path", "plot_embedding" }, { "numDimensions", 1536 }, { "similarity", "dotProduct" } } } } }; movieCollection.SearchIndexes.Update("vs_index", updatedDef);
Eliminar un índice de búsqueda
Puedes eliminar un índice de MongoDB Search o MongoDB Vector Search llamando al método SearchIndexes.DropOne() en una instancia de IMongoCollection. 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 SearchIndexes.DropOne() para borrar el índice:
movieCollection.SearchIndexes.DropOne("example_index");
Información Adicional
Para obtener información sobre otros índices que puedes crear utilizando el Driver .NET/C#, consulta la guía Crear y administrar í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: