適用於 NoSQL 的 Azure Cosmos DB 全文搜尋 (預覽)
適用於 NoSQL 的 Azure Cosmos DB 現在提供功能強大的全文搜尋功能,其設計目的是要增強應用程式的搜尋功能。
注意
全文檢索和混合式搜尋處於早期預覽狀態,目前可能無法在所有區域中使用。
什麼是全文搜索?
適用於 NoSQL 的 Azure Cosmos DB 現在提供功能強大的全文搜尋功能,其設計目的是要增強您的數據查詢功能。 此功能包含進階的文字處理技術,例如字幹分析、停止文字移除和標記化,透過特製化文字索引啟用有效率且有效的文字搜尋。 全文搜索也包含 全文檢索評分 ,其函式會評估檔與指定搜尋查詢的相關性。 BM25 或最佳比對 25 會考慮字詞頻率、反轉檔頻率和文件長度等因素來評分和排名檔。 這有助於確保最相關的文件出現在搜尋結果頂端,以改善文字搜尋的精確度和實用性。
全文搜索非常適合各種案例,包括:
- 電子商務:根據描述、評論和其他文字屬性快速尋找產品。
- 內容管理:有效率地搜尋文章、部落格和檔。
- 客戶支援:擷取相關的支援票證、常見問題和 知識庫 文章。
- 用戶內容:分析及搜尋用戶產生的內容,例如文章和批注。
- 聊天機器人的RAG:藉由從大型文字主體擷取相關信息來增強聊天機器人回應,以改善答案的正確性和相關性。
- 多代理程式 AI 應用程式:讓多個 AI 代理程式能夠共同搜尋及分析大量的文字數據,並提供完整且細微的深入解析。
如何使用全文搜索
注意
全文檢索和混合式搜尋(預覽版)目前可能無法在所有區域中使用。
- 啟用「全文檢索和混合式搜尋 NoSQL」預覽功能。
- 使用全文檢索原則和全文檢索索引設定容器。
- 使用文字屬性插入您的數據。
- 針對數據執行混合式查詢。
啟用 NoSQL 預覽功能的全文檢索和混合式搜尋
全文搜索、全文檢索評分和混合式搜尋都需要在使用之前,在適用於 NoSQL 的 Azure Cosmos DB 帳戶上啟用預覽功能。 請遵循下列步驟註冊:
- 瀏覽至您的 Azure Cosmos DB for NoSQL 資源頁面。
- 選取 [設定] 功能表項目下的 [功能] 窗格。
- 選取 [全文檢索和混合式搜尋 NoSQL API (預覽)] 功能。
- 閱讀功能的描述,以確認您想要啟用此功能。
- 選取 [啟用] 以開啟向量索引和搜尋功能。
設定混合式搜尋的容器原則和索引
若要使用全文搜索功能,您必須先定義兩個原則:
- 容器層級全文檢索原則,定義哪些路徑會包含新全文檢索查詢系統函式的文字。
- 新增至索引編製原則的全文檢索索引,可有效搜尋。
全文檢索原則
針對您要設定全文搜尋的每個文字屬性,您必須使用 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
投影。