AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

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

EF Core プロバイダーとともに MongoDB ベクトル検索 を使用して、Atlas に保存されているデータに対してセマンティック検索を実行できます。ベクトル検索では、キーワードの一致ではなく、意味に基づいてデータを検索クエリするため、より関連性の高い結果を検索できます。MongoDB Vector Search を使用すると、セマンティック検索、ハイブリッド検索、検索拡張生成(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 が提供するサンプル データセットの一部です。クラスターを設定してこのサンプル データをロードするには、クイック スタートガイドを参照してください。

EF Core プロバイダー で MongoDB ベクトル検索 を使用するには、エンティティ クラスで フィールド を定義します。IsVectorIndex() フルーエント 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 Search および MongoDB Vector Search 検索インデックス」ガイドを参照してください。

EF Core プロバイダーは、次のタイプのベクトル埋め込みをサポートしています。

EF Core Provider は、ベクトル埋め込みとして次の配列型をサポートします。

  • float[]

  • double[]

  • Memory<float> および ReadOnlyMemory<float>

  • Memory<double> および ReadOnlyMemory<double>

EF Core Provider は、次のバイナリベクトル型をサポートしています。これらの型は、配列型と比較してストレージを削減し、クエリパフォーマンスを向上させます。

  • 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 Vector Search の詳細については、MongoDB Vector Search ドキュメントを参照してください。

API ドキュメントについては、次のリソースを参照してください。