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 MongoDB Vector Search Indexes

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:

  • Crear un modelo de índice de búsqueda

  • Crear un índice de búsqueda

  • Crear múltiples índices de búsqueda

  • listSearchIndexes

  • Actualizar un índice de búsqueda

  • Eliminar un índice de búsqueda

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.

Las siguientes secciones describen cómo crear modelos de índice para los índices de MongoDB Search y MongoDB Vector Search.

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

Definition

BsonDocument

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.

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.

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.

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

Field

FieldDefinition<TDocument>

Especifica el campo que contiene los vectores a indexar.

Similarity

VectorSimilarity

Establece la función de similitud de vectores que se utilizará para buscar a los K vecinos más cercanos.

Dimensions

int

Especifica el número de dimensiones que la búsqueda aplica en el momento de indexación y en la query.

FilterFields

IReadOnlyList<FieldDefinition<TDocument>>

Especifica los campos que la búsqueda utiliza como filtros en la query vectorial.

Quantization

VectorQuantization?

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.

HnswMaxEdges

int?

Configura el número máximo de aristas que un nodo puede tener en el grafo Jerárquico de Mundos Navegables Pequeños.

HnswNumEdgeCandidates

int?

Establece el número máximo de nodos a evaluar para encontrar los vecinos más cercanos para conectarse a un nuevo nodo.

IncludedStoredFields

IReadOnlyList<FieldDefinition<TDocument>>

Especifica los campos que se deben almacenar en el índice. MongoDB Vector Search solo devuelve estos campos cuando configuras ReturnStoredSource en true en tus opciones de query. No puedes establecer tanto IncludedStoredFields como ExcludedStoredFields.

ExcludedStoredFields

IReadOnlyList<FieldDefinition<TDocument>>

Especifica los campos que se excluirán de ser almacenados en el índice. MongoDB Vector Search almacena todos los demás campos. Cuando estableces ReturnStoredSource en true en tus opciones de query, MongoDB Vector Search devuelve esos campos almacenados. No puedes establecer ambos IncludedStoredFields y ExcludedStoredFields.

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.

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

AutoEmbeddingModelName

string

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.

Modality

VectorEmbeddingModality

Especifica el tipo de dato a insertar. Actualmente, la única modalidad admitida es VectorEmbeddingModality.Text.

Similarity

VectorSimilarity?

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 Quantization: DotProduct cuando Quantization es None o Scalar, y Euclidean cuando Quantization es Binary o BinaryNoRescore.

Dimensions

int

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.

Quantization

VectorQuantization?

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.

HnswMaxEdges

int?

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 16.

HnswNumEdgeCandidates

int?

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 100.

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
);

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.

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"

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.

Este ejemplo realiza las siguientes acciones:

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

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

  3. Pasa un List de las instancias CreateSearchIndexModel y CreateVectorSearchIndexModel al método SearchIndexes.CreateMany()

  4. 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

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.

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": [...] }

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

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);

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.

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

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:

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