Start Debugging

EF Core 11 が DiskANN インデックスでネイティブな SQL Server ベクトル検索を追加

EF Core 11 Preview 2 は SQL Server 2025 の VECTOR_SEARCH() と DiskANN ベクトルインデックスを LINQ から直接サポートします。インデックスのセットアップ、近似クエリの実行方法、EF Core 10 の VectorDistance アプローチからの変更点を紹介します。

EF Core 10 は LINQ クエリで埋め込み間の正確な距離を計算するための EF.Functions.VectorDistance() を導入しました。これは動作しますが、数百万行に対する正確な検索は高価です。EF Core 11 Preview 2 は SQL Server 2025 の近似ベクトル検索: DiskANN インデックスとテーブル値関数 VECTOR_SEARCH() をサポートすることでギャップを埋め、すべて DbContext を通して配線されています。

ベクトルインデックスのセットアップ

OnModelCreating で希望する距離メトリック (コサイン、ドット積、またはユークリッド) でインデックスを宣言します。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>()
        .HasVectorIndex(b => b.Embedding, "cosine");
}

マイグレーションを追加すると、EF は SQL Server 2025 の DiskANN エンジンをターゲットにした CREATE VECTOR INDEX DDL を生成します。インデックスは通常の B-tree とフルテキストインデックスと並んで存在し、同じマイグレーションパイプラインを通じて管理されます。

VectorSearch() でクエリする

インデックスが存在したら、DbSet 上の新しい拡張メソッド VectorSearch() を使用します。

float[] queryEmbedding = GetEmbeddingForQuery("distributed caching");

var results = await context.Blogs
    .VectorSearch(b => b.Embedding, "cosine", queryEmbedding, topN: 5)
    .ToListAsync();

これは SQL Server のテーブル値関数 VECTOR_SEARCH() に変換され、DiskANN インデックスに対して近似最近傍ルックアップを実行します。topN パラメータは、返される結果の数を上限設定します。

戻り値の型は VectorSearchResult<TEntity> で、エンティティと計算された距離の両方を公開します。

var results = await context.Blogs
    .VectorSearch(b => b.Embedding, "cosine", queryEmbedding, topN: 10)
    .Select(r => new { r.Value.Name, r.Distance })
    .ToListAsync();

正確 vs 近似: どちらをいつ使うか

EF Core 10 の VectorDistance() は引き続き動作し、正確な結果を提供します。データセットが小さいときや、レイテンシより精度が重要なときに使用してください。DiskANN インデックスを伴う VectorSearch() は少量のリコール精度と引き換えに、大きなテーブルでの劇的に良いスループットを得られます。

実際には、ほとんどの RAG とレコメンデーションのワークロードは近似パスを望んでいます。以前ベクトル検索を専用データベース (Qdrant、Pinecone、pgvector) にオフロードしていた場合、これはすでに実行している SQL Server に戻し、EF Core がスキーマを管理するようになります。

要件

この機能は DiskANN ベクトルインデックスを導入した SQL Server 2025 をターゲットにしています。VECTOR_SEARCH() 関数と関連する CREATE VECTOR INDEX 構文は執筆時点で SQL Server で実験的なので、変更を予想してください。EF Core の API はその実験的なステータスを反映しています。

完全なセットアップ詳細については、EF Core ベクトル検索ドキュメント を参照してください。

< 戻る