Overview
LF Core プロバイダーでMongoDB ベクトル検索 を使用すると、Atlas に保存されているデータのセマンティック検索を実行できます。ベクトル検索では、キーワード一致ではなくセマンティック意味に基づいてデータをクエリするため、より関連性の高い結果を検索できます。 MongoDB ベクトル検索 は、セマンティック検索、ハイブリッド検索、検索拡張生成 (RAG) などのユースケースをサポートできます。
MongoDB ベクトル検索の詳細については、Atlas ドキュメントのMongoDB ベクトル検索概要を参照してください。
サンプル データ
このガイドの例では、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 が提供するサンプルデータセット の一部です。クラスターをセットアップして、このサンプルデータをロードするには、 クイック スタートガイドを 参照してください。
モデル定義
FS コア プロバイダーでMongoDB ベクトル検索 を使用するには、 エンティティクラスでベクトルフィールドを定義します。 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); }); } }
注意
インデックスが作成された後、 FS Core プロバイダーを使用してインデックスを変更または削除することはできません。インデックスを変更または削除するには、 .NET/ C#ドライバーを使用します。詳細については、 .NET/ C#ドライバーのドキュメントの「 MongoDB Search およびMongoDB ベクトル検索インデックス 」のガイドを参照してください。
サポートされているベクトル埋め込みタイプ
FS コア プロバイダーは、次の型のベクトル埋め込みをサポートしています。
配列表現
FS コア プロバイダーは、次の配列型をベクトル埋め込みとしてサポートします。
float[]double[]Memory<float>およびReadOnlyMemory<float>Memory<double>およびReadOnlyMemory<double>
バイナリ表現
FS コア プロバイダーは、配列タイプと比較してストレージを削減し、クエリのパフォーマンスを向上させる次のバイナリベクトル型をサポートしています。
BinaryVectorFloat32— 全精度 32 ビット浮動小数点数BinaryVectorInt8— 8ビットの量子化整数BinaryVectorPackedBit— 1 ビットの圧縮バイナリ値
.NET/ C#ドライバーの MongoDB.Driver名前空間には、バイナリベクトルインデックスの構成に使用される VectorQuantization 列挙と VectorSimilarity 列挙型が含まれています。
ベクトル検索クエリの例
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 ベクトル検索の詳細については、 MongoDB ベクトル検索 のドキュメントを参照してください。
APIドキュメントについては、次のリソースを参照してください。