你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Cosmos DB for NoSQL 中的全文搜索

重要

对此功能的支持正在全球推出,可能尚未在所有 Azure 公共区域完全可用。

Azure Cosmos DB for NoSQL 现提供强大的全文搜索功能,已正式发布。 这旨在增强应用的本机搜索功能,而无需外部搜索服务进行基本的全文搜索。

先决条件

  • 用于 NoSQL 帐户的 Azure Cosmos DB
  • 已启用矢量搜索功能

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 门户中通过 Azure Cosmos DB 资源的“功能”部分注册“ 全文搜索预览 功能”。

当前支持的语言包括:

  • en-US(英语)
  • de-DE(德语)
  • es-ES(西班牙语)
  • fr-FR(法语)

全文索引

任何全文搜索操作都应使用全文索引。 根据以下示例,可以轻松地在任何 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 中包含短语“red bicycle”的前 10 个结果。

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

FullTextContainsAll

在此示例中,我们希望获取前 10 个结果,其中关键字“red”和“bicycle”包含在属性 c.text中,但不一定一起包含。

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 子句中投影。

模糊搜索(预览版)

模糊搜索可以提高对拼写错误和文本变体的容错能力。 可以在搜索词和文档文本之间指定允许的“距离”(编辑次数),允许将接近匹配项视为命中。 可指定的最大距离为 2(两次编辑)。

注意

模糊搜索处于早期预览阶段。 通过预览版的演变,性能、质量和功能可能会发生变化。 若要试用,必须在 Azure 门户中通过 Azure Cosmos DB 资源的“功能”部分注册“ 全文搜索预览 功能”。

SELECT TOP 10 *
FROM c
WHERE FullTextContains(c.text, {"term": "red", "distance":1}, {"term": "bicycle", "distance":2})