你当前正在访问 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 代理能够协作搜索和分析大量文本数据,从而提供全面而细致的见解。

注意

全文和混合搜索(预览版)目前可能无法在所有区域中使用。

  1. 启用“针对 NoSQL 的全文和混合搜索”预览功能。
  2. 使用全文策略和全文索引配置容器。
  3. 插入带有文本属性的数据。
  4. 针对数据运行混合查询。

启用针对 NoSQL 的全文和混合搜索预览功能

全文搜索、全文评分和混合搜索都要求在使用前登录 Azure Cosmos DB for NoSQL 帐户,启用预览功能。 按照以下步骤注册:

  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”)是目前唯一支持的语言。

重要

全文策略或全文索引目前不支持通配符(*、[])。

全文索引

任何全文搜索操作都应使用全文索引。 根据以下示例,可以轻松地在任何 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 子句中投影。