Läs på engelska

Dela via


Hybridsökning i Azure Cosmos DB för NoSQL (förhandsversion)

Azure Cosmos DB for NoSQL stöder nu en kraftfull hybridsökningsfunktion som kombinerar vektorsökning med fulltextsökning (BM25) med hjälp av funktionen Reciprocal Rank Fusion (RRF).

Anteckning

Fulltext- och hybridsökning är i tidig förhandsversion och kanske inte är tillgängligt i alla regioner just nu.

Hybridsökning utnyttjar fördelarna med både vektorbaserade och traditionella nyckelordsbaserade sökmetoder för att leverera mer relevanta och korrekta sökresultat. Hybridsökning är enkelt att göra i Azure Cosmos DB för NoSQL på grund av möjligheten att lagra både metadata och vektorer i samma dokument.

Hybridsökning i Azure Cosmos DB för NoSQL integrerar två distinkta sökmetoder:

  • Vektorsökning: Använder maskininlärningsmodeller för att förstå den semantiska innebörden av frågor och dokument. Detta möjliggör mer nyanserade och sammanhangsmedvetna sökresultat, särskilt användbara för komplexa frågor där traditionell nyckelordssökning kan misslyckas.
  • Fulltextsökning (BM25): En väletablerad algoritm som poängsätter dokument baserat på förekomsten och frekvensen av ord och termer. BM25 är särskilt effektivt för enkla nyckelordssökningar, vilket ger en robust baslinje för sökrelevans.

Resultatet från vektorsökning och fulltextsökning kombineras sedan med funktionen Reciprocal Rank Fusion (RRF). RRF är en rankningsaggregeringsmetod som sammanfogar rangordningen från flera sökalgoritmer för att skapa en enda enhetlig rangordning. Detta säkerställer att de slutliga sökresultaten drar nytta av fördelarna med båda sökmetoderna och erbjuder flera fördelar.

  • Förbättrad relevans: Genom att kombinera semantisk förståelse med nyckelordsmatchning ger hybridsökning mer relevanta resultat för en mängd olika frågor.
  • Förbättrad noggrannhet: RRF-funktionen säkerställer att de mest relevanta resultaten från båda sökmetoderna prioriteras.
  • Mångsidighet: Lämplig för olika användningsfall, inklusive RAG (Retrieval Augmented Generation) för att förbättra svaren som genereras av en LLM som baseras på dina egna data.
  1. Aktivera funktionen Vector Search i Azure Cosmos DB for NoSQL.
  2. Aktivera funktionen Fullständig text- och hybridsökning efter NoSQL-förhandsversion.
  3. Skapa en container med en vektorprincip, fulltextprincip, vektorindex och fulltextindex.
  4. Infoga dina data med text- och vektoregenskaper.
  5. Kör hybridfrågor mot data.

Viktigt

För närvarande är vektorprinciper och vektorindex oföränderliga när de har skapats. Skapa en ny samling för att göra ändringar.

En exempelvektorprincip

JSON
{
   "vectorEmbeddings": [
       {
           "path":"/vector",
           "dataType":"float32",
           "distanceFunction":"cosine",
           "dimensions":3
       },

}

En exempelprincip för fulltext

JSON
{
    "defaultLanguage": "en-US",
    "fullTextPaths": [
        {
            "path": "/text",
            "language": "en-US"
        }
    ]
}

En exempelindexeringsprincip med både fulltext- och vektorindex

JSON
{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/\"_etag\"/?"
        },
        {
            "path": "/vector/*"
        }
    ],
    "fullTextIndexes": [
        {
            "path": "/text"
        }
    ],
    "vectorIndexes": [
        {
            "path": "/vector",
            "type": "DiskANN"
        }
    ]
}

Hybridsökningsfrågor

Hybridsökningsfrågor kan köras genom att RRF använda systemfunktionen i en ORDER BY RANK sats som innehåller både en VectorDistance funktion och FullTextScore. Till exempel skulle en parametriserad fråga för att hitta de viktigaste k mest relevanta resultaten se ut så här:

SQL
SELECT TOP @k *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, @queryVector), FullTextScore(c.content, [@searchTerm1, @searchTerm2, ...]))

Anta att du har ett dokument med vektorbäddningar lagrade i varje dokument i egenskapen c.vector och textdata som finns i egenskapen c.text. För att hämta de 10 mest relevanta dokumenten med hybridsökning kan frågan skrivas som:

SQL
SELECT TOP 10 * 
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, [1,2,3]), FullTextScore(c.text, ["text", "to", "search", "goes" ,"here])