共用方式為


適用於 NoSQL 的 Azure Cosmos DB 全文搜尋 (預覽)

適用於 NoSQL 的 Azure Cosmos DB 現在提供功能強大的全文搜尋功能,其設計目的是要增強應用程式的搜尋功能。

注意

全文檢索和混合式搜尋處於早期預覽狀態,目前可能無法在所有區域中使用。

適用於 NoSQL 的 Azure Cosmos DB 現在提供功能強大的全文搜尋功能,其設計目的是要增強您的數據查詢功能。 此功能包含進階的文字處理技術,例如字幹分析、停止文字移除和標記化,透過特製化文字索引啟用有效率且有效的文字搜尋。 全文搜索也包含 全文檢索評分 ,其函式會評估檔與指定搜尋查詢的相關性。 BM25 或最佳比對 25 會考慮字詞頻率、反轉檔頻率和文件長度等因素來評分和排名檔。 這有助於確保最相關的文件出現在搜尋結果頂端,以改善文字搜尋的精確度和實用性。

全文搜索非常適合各種案例,包括:

  • 電子商務:根據描述、評論和其他文字屬性快速尋找產品。
  • 內容管理:有效率地搜尋文章、部落格和檔。
  • 客戶支援:擷取相關的支援票證、常見問題和 知識庫 文章。
  • 用戶內容:分析及搜尋用戶產生的內容,例如文章和批注。
  • 聊天機器人的RAG:藉由從大型文字主體擷取相關信息來增強聊天機器人回應,以改善答案的正確性和相關性。
  • 多代理程式 AI 應用程式:讓多個 AI 代理程式能夠共同搜尋及分析大量的文字數據,並提供完整且細微的深入解析。

注意

全文檢索和混合式搜尋(預覽版)目前可能無法在所有區域中使用。

  1. 啟用「全文檢索和混合式搜尋 NoSQL」預覽功能。
  2. 使用全文檢索原則和全文檢索索引設定容器。
  3. 使用文字屬性插入您的數據。
  4. 針對數據執行混合式查詢。

啟用 NoSQL 預覽功能的全文檢索和混合式搜尋

全文搜索、全文檢索評分和混合式搜尋都需要在使用之前,在適用於 NoSQL 的 Azure Cosmos DB 帳戶上啟用預覽功能。 請遵循下列步驟註冊:

  1. 瀏覽至您的 Azure Cosmos DB for NoSQL 資源頁面。
  2. 選取 [設定] 功能表項目下的 [功能] 窗格。
  3. 選取 [全文檢索和混合式搜尋 NoSQL API (預覽)] 功能。
  4. 閱讀功能的描述,以確認您想要啟用此功能。
  5. 選取 [啟用] 以開啟向量索引和搜尋功能。

Azure 入口網站 中全文檢索和混合式搜尋預覽功能的螢幕快照。

若要使用全文搜索功能,您必須先定義兩個原則:

  • 容器層級全文檢索原則,定義哪些路徑會包含新全文檢索查詢系統函式的文字。
  • 新增至索引編製原則的全文檢索索引,可有效搜尋。

全文檢索原則

針對您要設定全文搜尋的每個文字屬性,您必須使用 path 文字和 language 文字宣告 屬性的 。 簡單的全文檢索原則可以是:

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

藉由將另一個元素新增至 fullTextPolicy 數位,即可輕鬆地定義多個文字路徑:

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

注意

英文 (“en-us” 作為語言) 是目前唯一支援的語言。

重要

全文檢索原則或全文檢索索引目前不支援通配符 (*, []) 。

全文檢索索引

任何全文搜索作業都應該使用 全文檢索索引。 您可以根據下列範例,輕鬆地在任何適用於 NoSQL 的 Azure Cosmos DB 索引原則中定義全文檢索索引。

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

如同全文檢索原則,全文檢索索引可以在多個路徑上定義。

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

全文搜索查詢

全文搜索和評分作業是使用 Azure Cosmos DB for NoSQL 查詢語言中的下列系統函式來執行:

  • FullTextContains:如果指定的字串包含在檔的指定屬性中,則傳 true 回 。 當您想要確保查詢所傳回的檔中包含特定關鍵詞時,這在 子句中 WHERE 很有用。
  • FullTextContainsAll:如果指定的所有字串都包含在檔的指定屬性中,則傳true回 。 當您想要確保查詢所傳回的檔中包含多個關鍵詞時,這在 子句中 WHERE 很有用。
  • FullTextContainsAny:如果指定的字串包含在檔的指定屬性中,則傳true回 。 當您想要確保查詢所傳回的檔中至少包含一個關鍵詞時,這在 子句中 WHERE 很有用。
  • FullTextScore:傳回分數。 這只能在 子句中使用 ORDER BY RANK ,其中傳回的檔會依全文檢索分數的排名排序,最相關的(最高評分)檔位於最上層,而最不相關的(最低評分)檔則位於底部。

以下是使用中每個函式的一些範例。

FullTextContains

在此範例中,我們想要取得屬性中包含 c.text關鍵詞 「bicycle」 的前 10 個結果。

SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, "bicycle")

FullTextContainsAll

在此範例中,我們想要取得前 10 個結果,其中的關鍵詞 “red” 和 “bicycle” 包含在 屬性 c.text中。

SELECT TOP 10 *
FROM c
WHERE FullTextContainsAll(c.text, "red", "bicycle")

FullTextContainsAny

在此範例中,我們想要取得前10個結果,其中關鍵詞 「red」 和 「bicycle」 或 「skateboard」 包含在 屬性 c.text中。

SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, "red") AND FullTextContainsAny(c.text, "bicycle", "skateboard")

FullTextScore

在此範例中,我們想要取得包含 「mountain」 和 「bicycle」 的前 10 個結果,並依相關性順序排序。 也就是說,具有這些詞彙的檔應該在清單中顯示得更高。

SELECT TOP 10 *
FROM c
ORDER BY RANK FullTextScore(c.text, ["bicycle", "mountain"])

重要

FullTextScore 只能用於 子句中 ORDER BY RANK ,而不能在 SELECT 語句或 子句中 WHERE 投影。