Overview
Puedes usar MongoDB Vector Search con el proveedor de EF Core para realizar búsquedas semánticas en los datos almacenados en Atlas. Vector Search consulta tus datos basándose en el significado semántico en lugar de en la coincidencia de palabras clave, lo que te permite obtener resultados más relevantes. Puedes usar MongoDB Vector Search para casos de uso como búsqueda semántica, búsqueda híbrida y generación aumentada de recuperación (RAG).
Para obtener más información sobre MongoDB Vector Search, consulta la Descripción general de MongoDB Vector Search en la documentación de Atlas.
Datos de muestra
Los ejemplos de esta guía utilizan el embedded_movies colección de la base de datos sample_mflix. Los documentos en esta colección utilizan la siguiente clase Movie como modelo:
public class Movie { public ObjectId Id { get; set; } public string Title { get; set; } = null!; public string Plot { get; set; } = null!; public float[] PlotEmbedding { get; set; } = null!; }
La embedded_movies colección forma parte de los conjuntos de datos de muestra proporcionados por Atlas. Para configurar un clúster y cargar estos datos de muestra, consulte la
Guía deinicio rápido.
Definición del modelo
Para usar MongoDB Vector Search con el proveedor de EF Core, defina un campo vectorial en su clase de entidad. Configure un índice vectorial en ese campo usando el método de API fluida IsVectorIndex().
El siguiente ejemplo define una entidad Movie con un campo vectorial llamado PlotEmbedding y configura un índice vectorial en ese campo.
public class MoviesDbContext : DbContext { public DbSet<Movie> Movies { get; init; } = null!; public MoviesDbContext(DbContextOptions options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Movie>(entity => { entity.ToCollection("embedded_movies"); entity.Property(m => m.Title).HasElementName("title"); entity.Property(m => m.Plot).HasElementName("plot"); entity.Property(m => m.PlotEmbedding).HasElementName("plot_embedding") .HasBinaryVectorDataType(BinaryVectorDataType.Float32); entity.HasIndex(m => m.PlotEmbedding, "vector_index") .IsVectorIndex(VectorSimilarity.Cosine, 1536); }); } }
Nota
No se pueden modificar ni eliminar índices mediante el proveedor de EF Core una vez creados. Para modificar o eliminar un índice, utilice el controlador .NET/C#. Para obtener más información, consulte la guía de índices de búsqueda de MongoDB y de búsqueda vectorial de MongoDB en la documentación del controlador .NET/C#.
Tipos de incrustaciones vectoriales compatibles
El proveedor EF Core admite incrustaciones vectoriales de los siguientes tipos:
Representaciones de arreglos
El proveedor EF Core admite los siguientes tipos de matrices como incrustaciones de vectores:
float[]double[]Memory<float>yReadOnlyMemory<float>Memory<double>yReadOnlyMemory<double>
Representaciones binarias
El proveedor EF Core admite los siguientes tipos de vectores binarios, que reducen el almacenamiento y mejoran el rendimiento de las consultas en comparación con los tipos de matrices:
BinaryVectorFloat32— números de coma flotante de precisión completa 32bitsBinaryVectorInt8— Enteros cuantificados de 8bitsBinaryVectorPackedBit— Valores binarios empaquetados de 1bits
El espacio de nombres MongoDB.Driver del controlador .NET/C# contiene las enumeraciones VectorQuantization y VectorSimilarity utilizadas para configurar los índices de vectores binarios.
Ejemplo de query de búsqueda vectorial
Puedes usar el método VectorSearch() para ejecutar una consulta de búsqueda vectorial. El siguiente ejemplo consulta la colección embedded_movies para encontrar películas con un valor de campo PlotEmbedding que sea semánticamente similar a "aventura de viaje en el tiempo" y luego devuelve hasta 10 documentos coincidentes.
// Replace queryVector with a 1536-dimension embedding vector from your model float[] queryVector = new float[] { 0.1f, -0.2f, 0.3f, ... }; var results = context.Movies .VectorSearch(m => m.PlotEmbedding, queryVector, limit: 10) .ToList();
Información Adicional
Para obtener más información sobre la búsqueda vectorial en MongoDB, consulte la documentación de la búsqueda vectorial en MongoDB.
Para obtener documentación sobre la API, consulte los siguientes recursos: