Sdílet prostřednictvím


Hybridní vyhledávání ve službě Azure Cosmos DB for NoSQL (Preview)

Azure Cosmos DB for NoSQL teď podporuje výkonnou funkci hybridního vyhledávání, která kombinuje vektorové vyhledávání s bodováním fulltextového vyhledávání (BM25) pomocí funkce Reciproční Rank Fusion (RRF).

Poznámka:

FullTextové a hybridní vyhledávání je v rané verzi Preview a nemusí být v současnosti dostupné ve všech oblastech.

Hybridní vyhledávání využívá silné stránky vektorových i tradičních vyhledávacích metod založených na klíčových slovech k poskytování relevantnějších a přesnějších výsledků hledání. Hybridní vyhledávání je v Azure Cosmos DB for NoSQL snadné díky možnosti ukládat metadata i vektory v rámci stejného dokumentu.

Hybridní vyhledávání ve službě Azure Cosmos DB for NoSQL integruje dvě odlišné metodologie vyhledávání:

  • Vektorové vyhledávání: Využívá modely strojového učení k pochopení sémantického významu dotazů a dokumentů. To umožňuje více nuancí a kontextové výsledky hledání, zejména užitečné pro složité dotazy, ve kterých by tradiční hledání klíčových slov mohlo padnout.
  • Fulltextové vyhledávání (BM25): Dobře zavedený algoritmus, který vyhodnotí dokumenty na základě přítomnosti a četnosti slov a termínů. BM25 je zvláště efektivní pro jednoduché hledání klíčových slov a poskytuje robustní směrný plán pro relevanci hledání.

Výsledky vektorového vyhledávání a fulltextového vyhledávání se pak zkombinují pomocí funkce Reciproční Rank Fusion (RRF). RRF je metoda agregace pořadí, která slučuje řazení z více vyhledávacích algoritmů a vytváří jedno sjednocené řazení. Tím zajistíte, že konečné výsledky hledání budou těžit ze silných stránek obou přístupů hledání a nabízejí více výhod.

  • Vylepšená relevance: Kombinací sémantického porozumění s párováním klíčových slov nabízí hybridní vyhledávání relevantnější výsledky pro širokou škálu dotazů.
  • Vylepšená přesnost: Funkce RRF zajišťuje, že nejpřesnější výsledky obou metod hledání jsou upřednostňovány.
  • Všestrannost: Vhodné pro různé případy použití, včetně načítání rozšířené generace (RAG) ke zlepšení odpovědí generovaných LLM na základě vašich vlastních dat.
  1. Povolte funkci Vektorové vyhledávání ve službě Azure Cosmos DB for NoSQL.
  2. Povolte funkci FullText & Hybrid Search for NoSQL Preview.
  3. Vytvořte kontejner se zásadami vektoru, fulltextovými zásadami, vektorovým indexem a fulltextovým indexem.
  4. Vložte data s vlastnostmi textu a vektoru.
  5. Spusťte hybridní dotazy na data.

Důležité

V současné době jsou vektorové zásady a indexy vektorů neměnné po vytvoření. Pokud chcete provést změny, vytvořte novou kolekci.

Ukázková zásada vektoru

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

}

Ukázková zásada fulltextu

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

Ukázková zásada indexování s fulltextovými i vektorovými indexy

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

Hybridní vyhledávací dotazy

Hybridní vyhledávací dotazy lze provádět pomocí RRF systémové funkce v ORDER BY RANK klauzuli, která zahrnuje funkci i VectorDistance FullTextScore. Například parametrizovaný dotaz, který najde nejrelevantnější výsledky, by vypadal takto:

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

Předpokládejme, že máte dokument, který obsahuje vektorové vkládání uložených v každém dokumentu ve vlastnosti c.vector a textová data obsažená ve vlastnosti c.text. Pokud chcete získat 10 nejrelevavantnějších dokumentů pomocí hybridního vyhledávání, můžete dotaz zapsat takto:

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