Hibrid keresés az Azure Cosmos DB for NoSQL-ben (előzetes verzió)
Az Azure Cosmos DB for NoSQL mostantól támogatja a hatékony hibrid keresési képességet, amely a Vector Search és a Teljes szöveges keresés pontozása (BM25) függvényt kombinálja a Kölcsönös rangsor fúziós (RRF) függvény használatával.
Megjegyzés
A Teljes szöveg > Hibrid keresés előzetes verzióban érhető el, és jelenleg nem minden régióban érhető el.
A hibrid keresés a vektoralapú és a hagyományos kulcsszóalapú keresési módszerek erősségeit használja a relevánsabb és pontosabb keresési eredmények eléréséhez. A hibrid keresés egyszerűen elvégezhető az Azure Cosmos DB for NoSQL-ben, mivel a metaadatokat és a vektorokat is tárolhatja ugyanabban a dokumentumban.
A Hibrid keresés az Azure Cosmos DB for NoSQL-ben két különböző keresési módszert integrál:
- Vektorkeresés: Gépi tanulási modelleket használ a lekérdezések és dokumentumok szemantikai jelentésének megértéséhez. Ez árnyaltabb és környezettudatosabb keresési eredményeket tesz lehetővé, különösen olyan összetett lekérdezések esetén hasznos, ahol a hagyományos kulcsszókeresés rövid lehet.
- Teljes szöveges keresés (BM25): Egy jól bevált algoritmus, amely a szavak és kifejezések jelenléte és gyakorisága alapján pontozza a dokumentumokat. A BM25 különösen hatékony az egyszerű kulcsszókeresésekhez, és robusztus alapkonfigurációt biztosít a keresési relevancia szempontjából.
A vektorkeresés és a teljes szöveges keresés eredményei ezután a Kölcsönös rangsor fúzió (RRF) függvény használatával lesznek kombinálva. Az RRF egy rangösszesítési módszer, amely egyesíti a rangsorokat több keresési algoritmusból egyetlen, egységes rangsor létrehozásához. Ez biztosítja, hogy a végső keresési eredmények mindkét keresési megközelítés erősségeiből részesüljenek, és több előnnyel járnak.
- Továbbfejlesztett relevancia: A szemantikai megértés és a kulcsszóegyeztetés kombinálásával a hibrid keresés relevánsabb eredményeket biztosít a lekérdezések széles köréhez.
- Továbbfejlesztett pontosság: Az RRF függvény biztosítja, hogy mindkét keresési módszer közül a leginkább megfelelő eredmények legyenek rangsorolva.
- Sokoldalúság: Alkalmas különböző használati esetekre, beleértve a retrieveal augmented generation (RAG) függvényt, hogy javítsa a saját adataira alapozott LLM által generált válaszokat.
- Engedélyezze a Vektorkeresést az Azure Cosmos DB for NoSQL szolgáltatásban.
- Engedélyezze a Full Text > Hybrid Search for NoSQL előzetes verziójú funkciót.
- Hozzon létre egy tárolót vektorszabályzattal, teljes szöveges szabályzattal, vektorindexkel és teljes szöveges indexel.
- Az adatok beszúrása szöveg- és vektortulajdonságokkal.
- Hibrid lekérdezések futtatása az adatokon.
Fontos
A vektorszabályzatok és a vektorindexek jelenleg nem módosíthatók a létrehozás után. A módosítások elvégzéséhez hozzon létre egy új gyűjteményt.
{
"vectorEmbeddings": [
{
"path":"/vector",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":3
},
}
{
"defaultLanguage": "en-US",
"fullTextPaths": [
{
"path": "/text",
"language": "en-US"
}
]
}
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?"
},
{
"path": "/vector/*"
}
],
"fullTextIndexes": [
{
"path": "/text"
}
],
"vectorIndexes": [
{
"path": "/vector",
"type": "DiskANN"
}
]
}
A hibrid keresési lekérdezések úgy hajthatók végre, hogy a RRF
rendszerfüggvényt egy ORDER BY RANK
olyan záradékban használják, amely egy függvényt és FullTextScore
egy VectorDistance
. Egy paraméteres lekérdezés például a legrelevánsabb k találatok megkereséséhez a következőképpen nézne ki:
SELECT TOP @k *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, @queryVector), FullTextScore(c.content, [@searchTerm1, @searchTerm2, ...]))
Tegyük fel, hogy rendelkezik egy olyan dokumentumkal, amely vektorbeágyazással rendelkezik az egyes dokumentumokban a tulajdonságban c.vector
és a c.text tulajdonságban található szöveges adatokban. A 10 legrelevánsabb dokumentum hibrid kereséssel való lekéréséhez a lekérdezés a következőképpen írható:
SELECT TOP 10 *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, [1,2,3]), FullTextScore(c.text, ["text", "to", "search", "goes" ,"here])