共用方式為


適用於 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 根據您自己的數據所產生的回應。
  1. 在適用於 NoSQL 的 Azure Cosmos DB 功能中啟用向量搜尋。
  2. 啟用 NoSQL 預覽功能的全文檢索和混合式搜尋。
  3. 建立具有向量原則、全文檢索原則、向量索引和全文檢索索引的容器。
  4. 使用文字和向量屬性插入您的數據。
  5. 針對數據執行混合式查詢。

重要

目前,在建立之後,向量原則和向量索引是不可變的。 若要進行變更,請建立新的集合。

範例向量原則

{
   "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])