Visão geral
Você pode usar o MongoDB pesquisa vetorial com o provedor EF Core para realizar pesquisas semânticas em dados armazenados no Atlas. A query de pesquisa vetorial seus dados com base no significado semântico, em vez de correspondências de palavras-chave, permitindo que você recupere resultados mais relevantes. Você pode usar o MongoDB pesquisa vetorial para oferecer suporte a casos de uso como pesquisa semântica, pesquisa híbrida e geração aumentada de recuperação (RAG).
Para saber mais sobre a pesquisa vetorial do MongoDB, consulte a Visão geral da pesquisa vetorial do MongoDB na documentação do Atlas.
Dados de amostra
Os exemplos neste guia usam a coleção embedded_movies do banco de dados sample_mflix . Os documentos nesta coleção utilizam a seguinte classe Movie como um 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!; }
The embedded_movies collection is part of the sample datasets provided by Atlas. To set up a cluster and load this sample data, see the Get Started with the EF Core Provider guide.
Definição do modelo
Para usar o MongoDB pesquisa vetorial com o EF Core provedor, defina um campo vetorial em sua classe de entidade. Configure um índice vetorial nesse campo usando o método de API fluente IsVectorIndex().
O exemplo a seguir define uma entidade Movie com um campo vetorial chamado PlotEmbedding e configura um índice vetorial nesse 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); }); } }
Observação
You cannot change or delete indexes by using the EF Core Provider after they are created. To change or delete an index, use the .NET/C# Driver. To learn more, see the MongoDB Search and MongoDB Vector Search Indexes guide in the .NET/C# Driver documentation.
Tipos de incorporação de vetor compatíveis
O provedor do EF Core suporta embedding vetorial dos seguintes tipos:
Representações de array
O provedor do EF Core suporta os seguintes tipos de array como embedding de vetor:
float[]double[]Memory<float>e aReadOnlyMemory<float>Memory<double>e aReadOnlyMemory<double>
Representações binárias
O provedor EF Core oferece suporte aos seguintes tipos de vetor binário, que reduzem o armazenamento e melhoram o desempenho da query em comparação com os tipos de array:
BinaryVectorFloat32— floats de 32bits de precisão totalBinaryVectorInt8— Inteiros quantizados de 8bitsBinaryVectorPackedBit— valores binários compactados de 1bits
O namespace MongoDB.Driver do driver .NET/C# contém os enums VectorQuantization e VectorSimilarity usados para configurar índices de vetor binário.
Exemplo de consulta de pesquisa vetorial
Você pode usar o método VectorSearch() para executar uma query de pesquisa vetorial. O exemplo a seguir consulta a coleção embedded_movies para filmes com um valor de campo PlotEmbedding semanticamente semelhante a "aventura de viagem no tempo" e, em seguida, retorna até 10 documentos correspondentes.
// 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();
Informações adicionais
To learn more about MongoDB Vector Search, see the MongoDB Vector Search documentation.
Para documentação da API, consulte os seguintes recursos: