Dela via


Vektorsökning

Anmärkning

Nedan beskrivs stöd för vektorsökning i EF 10. EF 9 innehåller liknande experimentellt stöd med något annorlunda namngivning av metoder.

Azure Cosmos DB erbjuder nu stöd för vektorlikhetssökning. Vektorsökning är en grundläggande del av vissa programtyper, inklusive AI, semantisk sökning och andra. Med Azure Cosmos DB kan du lagra vektorer direkt i dina dokument tillsammans med resten av dina data, vilket innebär att du kan utföra alla dina frågor mot en enda databas. Detta kan förenkla arkitekturen avsevärt och ta bort behovet av ytterligare en dedikerad vektordatabaslösning i stacken. Mer information om Azure Cosmos DB-vektorsökning finns i dokumentationen.

Egenskapen Vector kan konfigureras i 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);
        });
    }
}

Nu är din modell konfigurerad. Infogning av vektordata görs precis som andra datatyper med EF:

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

EF.Functions.VectorDistance() Använd slutligen funktionen i LINQ-frågor för att utföra vektorlikhetssökning:

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();

Detta returnerar de fem främsta bloggarna baserat på likheten mellan deras Vector egenskap och externa anotherVector data.

Vektorlikhetssökning kan användas med fulltextsökning i samma fråga (dvs. hybridsökning) genom att kombinera resultaten från VectorDistance och FullTextScore funktioner med hjälp av RRF funktionen (Reciprocal Rank Fusion).

Se dokumentationen för att lära dig hur du aktiverar stöd för fulltextsökning i EF-modellen och hur du använder hybridsökning i frågor.