次の方法で共有


ベクトル検索

Azure Cosmos DB では、ベクター類似性検索がサポートされるようになりました。 ベクトル検索は、AI、セマンティック検索など、一部のアプリケーションの種類の基本的な部分です。 Azure Cosmos DB を使用すると、残りのデータと共にベクターをドキュメントに直接格納できます。つまり、1 つのデータベースに対してすべてのクエリを実行できます。 これにより、アーキテクチャが大幅に簡素化され、スタック内の追加の専用ベクター データベース ソリューションが不要になります。 Azure Cosmos DB ベクトル検索について詳しくは、 ドキュメントをご覧ください

Vector プロパティは、 OnModelCreating内で構成できます。

public class Blog
{
    ...

    public float[] Vector { get; set; }
}

public class BloggingContext
{
    ...

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>(b =>
        {
            b.Property(b => b.Vector).IsVectorProperty(DistanceFunction.Cosine, dimensions: 1536);
            b.HasIndex(x => x.Vector).IsVectorIndex(VectorIndexType.Flat);
        });
    }
}

この時点で、モデルが構成されます。 ベクトル データの挿入は、EF を使用した他のデータ型と同じように行われます。

float[] vector = /* generate vector data from text, image, etc. */
context.Add(new Blog { Vector = vector });
await context.SaveChangesAsync();

最後に、LINQ クエリで EF.Functions.VectorDistance() 関数を使用して、ベクトルの類似性検索を実行します。

float[] anotherVector = /* generate vector data from text, image, etc. */
var blogs = await context.Blogs
    .OrderBy(s => EF.Functions.VectorDistance(s.Vector, anotherVector))
    .Take(5)
    .ToListAsync();

これにより、Vector プロパティと外部から提供された anotherVector データの類似性に基づいて、上位 5 つのブログが返されます。

ベクター類似性検索は、VectorDistance (逆ランク Fusion) 関数を使用してFullTextScore関数とRRF関数の結果を組み合わせることにより、同じクエリ内のフルテキスト検索 (ハイブリッド検索) で使用できます。

EF モデルでフルテキスト検索のサポートを有効にする方法と、クエリでハイブリッド検索を使用する方法については、 ドキュメント を参照してください。