Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /
/ / /

Ejecuta una query de búsqueda vectorial de Atlas

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.

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.

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

El proveedor EF Core admite incrustaciones vectoriales de los siguientes tipos:

El proveedor EF Core admite los siguientes tipos de matrices como incrustaciones de vectores:

  • float[]

  • double[]

  • Memory<float> y ReadOnlyMemory<float>

  • Memory<double> y ReadOnlyMemory<double>

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 32bits

  • BinaryVectorInt8 — Enteros cuantificados de 8bits

  • BinaryVectorPackedBit — 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.

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

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:

Volver

Transacciones

En esta página