Overview
Puedes usar MongoDB Búsqueda vectorial con el proveedor EF Core para realizar búsquedas semánticas en datos almacenados en Atlas. Las búsquedas vectoriales interrogan los datos según su significado semántico, no solo por coincidencias de palabras clave, permitiéndote recuperar resultados más relevantes. Puede utilizar la Búsqueda Vectorial de MongoDB para respaldar casos de uso como la búsqueda semántica, la búsqueda híbrida y la generación de recuperación aumentada (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 la colección embedded_movies de la base de datos sample_mflix. Los documentos de 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 colección embedded_movies forma parte de los datasets de muestra proporcionados por Atlas. Para configurar un clúster y cargar estos datos de muestra, consulta la guía de inicio rápido.
Definición del modelo
Para usar MongoDB búsqueda vectorial con el proveedor EF Core, define un campo vectorial en tu clase de entidad. Configure un índice vectorial en ese campo utilizando el método de la 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 puede cambiar ni borrar índices utilizando el proveedor EF Core después de haber sido creados. Para cambiar o borrar un índice, use el Driver .NET/C#. Para obtener más información, consulte la guía MongoDB Search y MongoDB Vector Search índices de búsqueda en la documentación del driver .NET/C# .
Tipos de incrustaciones vectoriales compatibles
El proveedor de EF Core admite incrustaciones vectoriales de los siguientes tipos:
Representaciones de arreglos
El Proveedor de EF Core admite los siguientes tipos de arreglos como incrustaciones vectoriales:
float[]double[]Memory<float>yReadOnlyMemory<float>Memory<double>yReadOnlyMemory<double>
Representaciones binarias
El proveedor de EF Core admite los siguientes tipos de vectores binarios, que reducen el almacenamiento y mejoran el rendimiento de las query en comparación con los tipos de arreglo:
BinaryVectorFloat32- Números de punto flotante de 32bits de precisión totalBinaryVectorInt8— Enteros cuantificados de 8bitsBinaryVectorPackedBit— valores binarios empaquetados de 1bits
El MongoDB.Driver namespace del driver .NET/C# incluye los enums VectorQuantization y VectorSimilarity utilizados 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 query la colección embedded_movies para películas con un valor en el campo PlotEmbedding que sea semánticamente similar a "aventura de viajes 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 MongoDB búsqueda vectorial, consulta la documentación de MongoDB búsqueda vectorial.
Para documentación de API, consulta los siguientes recursos: