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

Atlas ベクトル検索クエリの実行

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ドキュメントについては、次のリソースを参照してください。

戻る

トランザクション

項目一覧