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

运行Atlas Vector Search查询

您可以将MongoDB Vector Search 与 EF Core 提供程序结合使用,对Atlas中存储的数据执行语义搜索。 Vector 搜索根据语义而不是关键字匹配来查询数据,从而检索更相关的结果。您可以使用MongoDB Vector Search 来支持语义搜索、混合搜索和检索增强生成 (RAG) 等使用案例。

要学习;了解有关MongoDB Vector Search 的更多信息,请参阅Atlas文档中的 MongoDB Vector Search 概述

本指南中的示例使用 sample_mflix数据库中的 embedded_movies集合。此集合中的文档使用以下 Movie 类作为模型:

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!;
}

embedded_movies集合是Atlas提供的示例数据集的一部分。要设立集群并加载此示例数据,请参阅 快速入门指南。

要将MongoDB Vector Search 与 EF Core 提供程序结合使用,请在实体类上定义向量字段。使用 IsVectorIndex() Fluent API方法配置该字段的向量索引。

以下示例定义了一个具有名为 PlotEmbedding 的向量字段的 Movie 实体,并在该字段上配置了向量索引。

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

注意

创建索引后,您无法使用 EF Core 提供程序更改或删除索引。要更改或删除索引,请使用.NET/ C#驱动程序。要学习;了解更多信息,请参阅.NET/ C#驱动程序文档中的MongoDB搜索和MongoDB Vector Search 索引指南。

EF Core 提供程序支持以下类型的向量嵌入:

EF Core 提供程序支持以下大量类型作为向量嵌入:

  • float[]

  • double[]

  • Memory<float>ReadOnlyMemory<float>

  • Memory<double>ReadOnlyMemory<double>

EF Core 提供程序支持以下二进制向量类型,与大量类型相比,这些类型可减少存储并提高查询性能:

  • BinaryVectorFloat32 — 全精度 32 位浮点数

  • BinaryVectorInt8 — 8 位量化整数

  • BinaryVectorPackedBit — 1 位打包二进制值

.NET/ C#驱动程序的 MongoDB.Driver命名空间包含用于配置二进制向量索引的 VectorQuantizationVectorSimilarity 枚举。

您可以使用 VectorSearch() 方法运行向量搜索查询。以下示例查询 embedded_movies集合中 PlotEmbedding字段值在语义上类似于“时间旅行冒险”的电影,然后最多返回 10 个匹配的文档。

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

要学习;了解有关MongoDB Vector Search 的更多信息,请参阅MongoDB Vector Search 文档。

有关API文档,请参阅以下资源:

后退

事务

在此页面上