Start Debugging

MongoDB EF Core プロバイダーの Queryable Encryption とベクトル検索 (.NET 9 と .NET 10 にとって何が大事か)

MongoDB EF Core プロバイダーが Queryable Encryption とベクトル検索をサポートしました。すでに EF Core を使っている .NET 9 / .NET 10 アプリにとって、それが何を意味するかを解説します。

2026 年 1 月 7 日、Microsoft はセキュリティと検索が交差する素敵なアップデートを公開しました: MongoDB EF Core プロバイダーが、EF Core スタイルの LINQ サーフェスから Queryable Encryption (等価および範囲) と ベクトル検索 をサポートするようになりました。あなたの .NET 9 や .NET 10 アプリがすでに EF Core を流暢に話しているなら、これはドメイン層に染み出す「MongoDB 専用コード」の量を減らせる類の機能です。

暗号化されたクエリでも LINQ のように見える

Queryable Encryption が興味深いのは、単なる「保存時の暗号化」ではないからです。要点は、機密フィールドを暗号化したまま、等価範囲 の述語を表現できることです。

マッピングは OnModelCreating で明示的に行います。元の記事はこのように暗号化設定を示しています:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Employee>(entity =>
    {
        entity.Property(e => e.TaxPayerId)
            .IsEncryptedForEquality(<Your Data Encryption Key GUID>));

        entity.Property(e => e.Salary)
            .HasBsonRepresentation(BsonType.Decimal128)
            // Salaries from 0 to 10 million, no decimal place precision
            .IsEncryptedForRange(0m, 10000000m, 0,
                <Your Data Encryption Key GUID>));              
    });
}

マッピングしてしまえば、クエリは普通の EF Core クエリのように読めます:

// Encrypted Equality Query
var specificEmployee = db.Employees.Where(e => e.TaxPayerId == "45678");

// Encrypted Range Query
var seniorEmployees = db.Employees.Where(e => e.Salary >= 100000m && e.Salary < 200000m);

大きな勝ちはアーキテクチャ面にあります: コードレビューでクエリの意図 (誰が給与でフィルターしているか、誰が納税者 ID でマッチしているか) を見える形に保ちつつ、アプリ全体にアドホックな暗号化配線をばら撒かずに済みます。

DbContext からのベクトル検索

検索がキーワードマッチから類似度マッチへと移っているため、ベクトル検索はあちこちに登場しています。プロバイダーはベクトルフィールドのマッピングと、ベクトル検索のクエリ API を追加します。

DevBlogs の記事から、float の配列をバイナリベクトルとしてマッピングします:

b.Property(e => e.PlotEmbedding)
   .HasElementName("plot_embedding_voyage_3_large")
   .HasBinaryVectorDataType(BinaryVectorDataType.Float32);

// OR in the model:
[BinaryVector(BinaryVectorDataType.Float32)]
public float[]? PlotEmbedding { get; set; }

そして類似度でクエリできます:

var similarMovies = await db.Movies.VectorSearch(
        e => e.PlotEmbedding,
        myCustom.PlotEmbedding,
        limit: 10)
    .ToListAsync();

.NET 9 や .NET 10 で構築しているなら、これによって「レコメンド/検索」のロジックを既存の EF Core パターンに近づけて保ち、メンテすべきカスタムクエリパイプラインを減らせます。

完全な背景とプロバイダーの詳細が知りたい場合は、元の記事を読んでください: Secure and Intelligent: Queryable Encryption and Vector Search in MongoDB EF Core Provider.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< 戻る