Visão geral
Você pode usar a Vector Search do MongoDB com o provedor de núcleo EF para realizar pesquisas semânticas em dados armazenados no Atlas. A pesquisa vetorial query seus dados com base no significado semântica em vez de correspondências de palavras-chave, permitindo que você recupere resultados mais relevantes. Você pode usar o MongoDB Vector Search 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 na documentação do Atlas.
Dados de amostra
Os exemplos nesta guia usam a coleção embedded_movies do banco de dados do sample_mflix . Os documentos nesta coleção utilizam a seguinte classe 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!; }
A embedded_movies coleção faz parte dos conjuntos de dados de amostra fornecidos pelo Atlas. Para configurar um cluster e carregar esses dados de amostra, consulte o guia de Início Rápido.
Definição do modelo
Para usar a Vector Search do MongoDB com o provedor de núcleo EF, defina um campo de vetor em sua classe de entidade. Configure um índice vetorial nesse campo usando o método API fluente IsVectorIndex().
O exemplo seguinte define uma entidade Movie com um campo de vetor denominado PlotEmbedding e configura um índice de vetor neste 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
Você não pode alterar ou excluir índices usando o EF Core Provider depois que eles forem criados. Para alterar ou excluir um índice, use o driver .NET/C#. Para saber mais, consulte o guia MongoDB Search e MongoDB Vector Search Indexes na documentação do driver .NET/C#.
Tipos de incorporação de vetor compatíveis
O fornecedor EF Core Provider oferece suporte a incorporações vetoriais dos seguintes tipos:
Representações de array
O fornecedor de núcleo EF oferece suporte aos seguintes tipos de array como incorporações vetoriais:
float[]double[]Memory<float>e aReadOnlyMemory<float>Memory<double>e aReadOnlyMemory<double>
Representações binárias
O EF Core Provider é compatível com os seguintes tipos de vetores binários, que reduzem o armazenamento e melhoram o desempenho da consulta em comparação com os tipos de array:
BinaryVectorFloat32— flutuações de 32bits de precisão totalBinaryVectorInt8— 8inteiros quantizados de bitsBinaryVectorPackedBit— 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 query a coleção embedded_movies em busca de filmes com um valor de campo PlotEmbedding que é semanticamente semelhante a "ventura com 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
Para saber mais sobre a Vector Search do MongoDB , consulte a documentação da Vector Search do MongoDB .
Para obter a documentação da API, consulte os seguintes recursos: