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

在 Azure AI 搜索中向查询添加拼写检查

重要

拼写更正根据补充使用条款处于公开预览状态。 它通过 Azure 门户、预览版 REST API 和 beta 版本的 Azure SDK 库提供。

在查询到达搜索引擎之前,可以通过对查询中的单词进行拼写更正来改善召回率。 所有文本(非矢量)查询类型都支持 speller 参数。

先决条件

  • 基本层或更高层的搜索服务(任何区域中)。

  • 现有搜索索引,其中包含使用支持的语言的内容。

  • 一个查询请求,具有 speller=lexiconqueryLanguage 设置为某种受支持的语言。 拼写检查适用于在 search 参数中传递的字符串。 筛选器、模糊搜索、通配符搜索、正则表达式或矢量查询不支持它。

对查询请求使用支持预览版 API 的搜索客户端。 可以使用 REST 客户端或已修改的代码对预览版 API 发出 REST 调用。 你还可以使用 Azure SDK 的 beta 版本。

客户端库 版本
REST API 版本 2020-06-30-Preview 及更高版本。 当前版本为 2023-10-01-Preview
用于 .NET 的 Azure SDK 版本 11.5.0-beta.5
用于 Java 的 Azure SDK 版本 11.6.0-beta.5
用于 JavaScript 的 Azure SDK 版本 11.3.0-beta.8
用于 Python 的 Azure SDK 版本 11.4.0b3

下面的示例使用内置的 hotels-sample 索引演示了如何对一个简单的文本查询进行拼写更正。 在不进行拼写更正的情况下,该查询返回零个结果。 更正后,该查询返回一条结果(Johnson 家庭度假村)。

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2020-06-30-Preview
{
    "search": "famly acitvites",
    "speller": "lexicon",
    "queryLanguage": "en-us",
    "queryType": "simple",
    "select": "HotelId,HotelName,Description,Category,Tags",
    "count": true
}

对完整 Lucene 的拼写更正

拼写更正是针对接受文本分析的单个查询字词进行的,正因如此,你可以对某些 Lucene 查询(但不能是其他查询)使用拼写检查器参数。

  • 绕过文本分析的不兼容查询格式包括:通配符、正则表达式、模糊
  • 兼容的查询格式包括:字段搜索、接近性、字词提升

此示例对采用完整 Lucene 语法并包含一个拼错的查询字词的“类别”字段使用字段搜索。 通过包含拼写检查器,“Suiite”中的拼写错误已得到更正,查询将会成功。

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2020-06-30-Preview
{
    "search": "Category:(Resort and Spa) OR Category:Suiite",
    "queryType": "full",
    "speller": "lexicon",
    "queryLanguage": "en-us",
    "select": "Category",
    "count": true
}

通过语义排名进行拼写更正

此查询只有一个字词拼写正确,其他每个字词都有拼写错误,它将接受拼写更正以返回相关结果。 若要了解详细信息,请参阅配置语义排名

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2020-06-30-Preview     
{
    "search": "hisotoric hotell wiht great restrant nad wiifi",
    "queryType": "semantic",
    "speller": "lexicon",
    "queryLanguage": "en-us",
    "searchFields": "HotelName,Tags,Description",
    "select": "HotelId,HotelName,Description,Category,Tags",
    "count": true
}

支持的语言

可以在下表中找到 queryLanguage 的有效值,这些值复制自支持的语言(REST API 参考)列表。

语言 queryLanguage
英语 [EN] EN、EN-US(默认)
西班牙语 [ES] ES、ES-ES(默认)
法语 [FR] FR、FR-FR(默认)
德语 [DE] DE、DE-DE(默认)
荷兰语 [NL] NL、NL-BE、NL-NL(默认值)

注意

以前,虽然语义排名为公共预览版,但 queryLanguage 参数也用于语义排名。 语义排名现在与语言无关。

语言分析器注意事项

包含非英语内容的索引通常在非英语字段上使用语言分析器来应用本机语言的语言规则。

当向也在接受文本分析的内容添加拼写检查时,如果为每个索引编制和查询处理步骤使用相同的语言,则可以获得更好的结果。 例如,如果字段内容的索引是使用“fr.microsoft”语言分析器编制的,则查询和拼写检查应使用某种形式的法语词典或语言库。

回顾如何在 Azure AI 搜索中使用语言库:

  • 语言分析器可以在索引编制和查询执行期间调用,可以是 Apache Lucene(例如“de.lucene”)或 Microsoft(“de.microsoft”)。

  • 拼写检查期间调用的语言词典是使用受支持的语言表中的语言代码之一指定的。

在查询请求中,分配给 queryLanguage 的值应用于 speller

注意

仅在使用语言分析器时才需注意各属性值之间的语言一致性。 如果使用与语言无关的分析器(例如关键字、简单、标准、停止、空格或 standardasciifolding.lucene),则 queryLanguage 值可以是所需的任意值。

尽管搜索索引中的内容可以用多种语言撰写,但查询输入很可能用一种语言。 搜索引擎不检查 queryLanguage、语言分析器以及撰写内容所用的语言的兼容性,因此请确保对查询范围进行相应的限定以避免产生不正确的结果。

后续步骤