適用於 NoSQL 的 Azure Cosmos DB 混合式搜尋 (預覽)
適用於 NoSQL 的 Azure Cosmos DB 現在支援強大的混合式搜尋功能,使用倒數排名融合 (RRF) 函式,結合向量搜尋與全文搜索評分 (BM25)。
注意
全文檢索和混合式搜尋處於早期預覽狀態,目前可能無法在所有區域中使用。
什麼是混合式搜尋?
混合式搜尋利用向量型和傳統關鍵詞型搜尋方法的優點,以提供更相關且精確的搜尋結果。 混合式搜尋很容易在適用於 NoSQL 的 Azure Cosmos DB 中執行,因為能夠將元數據和向量儲存在相同的檔中。
適用於 NoSQL 的 Azure Cosmos DB 混合式搜尋會整合兩種不同的搜尋方法:
- 向量搜尋:利用機器學習模型來了解查詢和文件的語意意義。 這允許更細微和內容感知的搜尋結果,特別適用於傳統關鍵詞搜尋可能不足的複雜查詢。
- 全文搜索(BM25):一種成熟的演算法,可根據文字和字詞的存在和頻率來評分檔。 BM25 對於直接關鍵詞搜尋特別有效,可提供健全的搜尋相關性基準。
然後,使用倒數排名融合 (RRF) 函式結合向量搜尋和全文搜索的結果。 RRF 是一種排名匯總方法,可將多個搜尋演算法的排名合併,以產生單一統一的排名。 這可確保最終搜尋結果受益於搜尋方法的優點,並提供多個優點。
- 增強相關性:藉由結合語意理解與關鍵詞比對,混合式搜尋可為各種查詢提供更相關的結果。
- 改善正確性:RRF 函式可確保這兩種搜尋方法中最相關的結果會優先處理。
- 多功能性:適用於各種使用案例,包括 擷取擴增世代 (RAG) ,以改善 LLM 根據您自己的數據所產生的回應。
如何使用混合式搜尋
- 在適用於 NoSQL 的 Azure Cosmos DB 功能中啟用向量搜尋。
- 啟用 NoSQL 預覽功能的全文檢索和混合式搜尋。
- 建立具有向量原則、全文檢索原則、向量索引和全文檢索索引的容器。
- 使用文字和向量屬性插入您的數據。
- 針對數據執行混合式查詢。
設定混合式搜尋的原則和索引
重要
目前,在建立之後,向量原則和向量索引是不可變的。 若要進行變更,請建立新的集合。
範例向量原則
{
"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"
}
]
}
混合式搜尋查詢
混合式搜尋查詢可以藉由利用 RRF
子句中的 ORDER BY RANK
系統函式來執行,其中包含 VectorDistance
函式和 FullTextScore
。 例如,尋找最 上層 最相關的結果的參數化查詢看起來會像這樣:
SELECT TOP @k *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, @queryVector), FullTextScore(c.content, [@searchTerm1, @searchTerm2, ...]))
假設您有一份檔,其中包含儲存在每個檔中 c.vector
的向量內嵌內容,以及屬性 c.text 中包含的文字數據。 若要使用混合式搜尋取得 10 份最相關的檔,可以將查詢撰寫為:
SELECT TOP 10 *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, [1,2,3]), FullTextScore(c.text, ["text", "to", "search", "goes" ,"here])