你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Cosmos DB for NoSQL 中的全文搜索(预览版)
Azure Cosmos DB for NoSQL 现在提供强大的全文搜索功能(预览版),专门用于增强应用程序的搜索功能。
注意
全文和混合搜索处于早期预览状态,目前可能无法在所有区域中使用。
什么是全文搜索?
Azure Cosmos DB for NoSQL 现在提供强大的全文搜索功能(预览版),专门用于增强数据查询功能。 此功能包括高级文本处理技术(如词干分解、干扰词删除和词汇切分),从而通过专用文本索引实现高效和有效的文本搜索。 全文搜索还包括全文评分,该功能用于评估文档与给定搜索查询的相关性。 BM25 (Best Matching 25) 综合考虑术语频率、反转文档频率和文档长度等因素来对文档进行评分和排名。 这有助于确保最相关的文档显示在搜索结果的顶部,从而提高文本搜索的准确性和有用性。
全文搜索适用于多种场景,包括:
- 电子商务:根据描述、评价和其他文本属性快速查找产品。
- 内容管理:高效搜索文章、博客和文档。
- 客户支持:检索相关的支持票证、常见问题解答和知识库文章。
- 用户内容:分析和搜索用户生成的内容,例如帖子和评论。
- 针对聊天机器人的 RAG:通过从大型文本语料库检索相关信息来增强聊天机器人响应,从而提高答案的准确性和相关性。
- 多代理 AI 应用:使多个 AI 代理能够协作搜索和分析大量文本数据,从而提供全面而细致的见解。
如何使用全文搜索
注意
全文和混合搜索(预览版)目前可能无法在所有区域中使用。
- 启用“针对 NoSQL 的全文和混合搜索”预览功能。
- 使用全文策略和全文索引配置容器。
- 插入带有文本属性的数据。
- 针对数据运行混合查询。
启用针对 NoSQL 的全文和混合搜索预览功能
全文搜索、全文评分和混合搜索都要求在使用前登录 Azure Cosmos DB for NoSQL 帐户,启用预览功能。 按照以下步骤注册:
- 导航到 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”)是目前唯一支持的语言。
重要
全文策略或全文索引目前不支持通配符(*、[])。
全文索引
任何全文搜索操作都应使用全文索引。 根据以下示例,可以轻松地在任何 Azure Cosmos DB for NoSQL 索引策略中定义全文索引。
{
"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
在此示例中,我们想要获取属性 c.text
中包含关键词“red”和“bicycle”的前 10 个结果。
SELECT TOP 10 *
FROM c
WHERE FullTextContainsAll(c.text, "red", "bicycle")
FullTextContainsAny
在此示例中,我们想要获取属性 c.text
中包含关键词“red”和“bicycle”或“skateboard”的前 10 个结果。
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
子句中投影。