使用分析器和标记化术语改进索引
默认情况下,Azure AI 搜索配置为分析文本并标识对索引有用的标记。 正确的标记确保用户可以快速找到所需的文档。 在大多数情况下,默认配置生成最佳索引。 但是,如果具有异常字段或唯一字段,可能需要准确配置如何分析文本。
在这里,你将了解如何定义自定义分析器,以控制字段内容如何拆分为标记以包含在索引中。
AI 搜索中的分析器
AI 搜索为内容编制索引时,它会检索文本。 若要生成有用的索引,其中包含帮助用户查找文档的术语,该文本需要处理。 例如:
- 文本应拆分为单词,通常使用空格和标点符号作为分隔符。
- 应删除非索引字(如“the”和“it”),因为用户不会搜索它们。
- 单词应还原为其原形。 例如,过去时态单词(如“ran”)应替换为现在时态单词(如“run”)。
在 AI 搜索中,这种处理由分析器执行。 如果未为字段指定分析器,将使用默认 Lucene 分析器。 对于大多数字段,默认 Lucene 分析器是一个不错的选择,因为它可以处理多种语言并为索引返回有用的标记。
或者,可以指定 AI 搜索中内置的分析器之一。 内置分析器有两种类型:
- 语言分析器。 如果需要特定语言的高级功能(如词形还原、单词分解和实体识别),请使用内置语言分析器。 Microsoft 为不同语言提供 50 个分析器。
- 专用分析器。 这些分析器与语言无关,用于专用字段,例如邮政编码或产品 ID。 例如,可以使用 PatternAnalyzer 并指定正则表达式以匹配标记分隔符。
什么是自定义分析器?
内置分析器为你提供许多选项,但有时需要具有字段异常行为的分析器。 在这些情况下,可以创建自定义分析器。
自定义分析器包括:
- 字符筛选器。 这些筛选器在字符串到达 tokenizer 之前对它进行处理。
- Tokenizer。 这些组件将文本划分为要添加到索引的标记。
- 标记筛选器。 这些筛选器删除或修改由 tokenizer 发出的标记。
让我们更详细地查看这些组件。
字符筛选器
在将文本拆分为标记之前,可能需要对文本完成某些操作。 字符筛选器启用这些操作。 可以使用三个字符筛选器:
- html_strip。 此筛选器删除 HTML 构造,如标记和属性。
- mapping。 使用此筛选器可以指定将一个字符串替换为另一个字符串的映射。 例如,可以指定将 TX 替换为 Texas 的映射。
- pattern_replace。 使用此筛选器可以指定一个正则表达式,用于标识输入文本中的模式以及如何替换匹配文本。
Tokenizer
tokenizer 是将文本划分为将存储在索引中的标记的组件。 tokenizer 还会将单词分解为其原形。 通常,标记是一个单词,但你可能想要创建异常标记,例如:
- 完整的邮政地址。
- 完整的 URL 或电子邮件地址。
- 基于特定语言的语法的单词。
有 13 个不同的 tokenizer 可供选择。 这些 tokenizer 包括:
- classic。 此 tokenizer 基于欧洲语言的语法处理文本。
- 关键字 此 tokenizer 将整个输入作为单个标记发出。 将此 tokenizer 用于应始终作为一个值编制索引的字段。
- lowercase。 此 tokenizer 将文本划分为非字母,然后将生成的标记修改为所有小写。
- microsoft_language_tokenizer。 此 tokenizer 基于指定的语言的语法划分文本。
- pattern。 此 tokenizer 在与指定的正则表达式匹配的位置划分文本。
- whitespace。 此 tokenizer 在有空格的位置划分文本。
注意
有关 tokenizer 的完整列表,请参阅下面的“了解详细信息”部分中的“将自定义分析器添加到 Azure AI 搜索索引中的字符串字段”。
标记筛选器
tokenizer 将传入文本划分为标记后,可能需要添加一些额外的处理,例如删除非索引字或剪裁标点符号。 可以通过指定标记筛选器来执行此处理。 有 41 个不同的标记筛选器可用,包括:
- 特定于语言的筛选器,例如 arabic_normalization。 这些筛选器应用特定于语言的语法规则,以确保删除单词的形式并将其替换为原形。
- apostrophe。 此筛选器从标记中删除任何撇号,以及撇号后面的任何字符。
- classic。 此筛选器从首字母缩略词中删除英语所有格和点。
- keep。 此筛选器从指定的列表中删除不包含一个或多个单词的任何标记。
- 。 此筛选器删除长于指定的最小值或短于指定的最大值的任何标记。
- trim。 此筛选器从标记中删除任何前导和尾随空格。
注意
有关标记筛选器的完整列表,请参阅下面的“了解详细信息”部分中的“将自定义分析器添加到 Azure AI 认知搜索索引中的字符串字段”。
创建自定义分析器
通过在定义索引时指定一个自定义分析器进行创建。 必须使用 JSON 代码执行此操作 - 无法在 Azure 门户中指定自定义索引。 在设计时使用 analyzers
部分。 只能包含一个 tokenizer,但包含一个或多个字符筛选器以及一个或多个标记筛选器。 对分析器使用唯一名称,并将 @odata.type
属性设置为 Microsoft.Azure.Search.CustomAnalyzer
。
在此示例中,字符筛选器删除 HTML 格式,tokenizer 根据冰岛文的语法拆分文本,标记筛选器删除撇号:
"analyzers":(optional)[
{
"name":"ContosoAnalyzer",
"@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
"charFilters":[
"WebContentRemover"
],
"tokenizer":"IcelandicTokenizer",
"tokenFilters":[
"ApostropheFilter"
]
}
],
"charFilters":(optional)[
{
"name":"WebContentRemover",
"@odata.type":"#html_strip"
}
],
"tokenizers":(optional)[
{
"name":"IcelandicTokenizer",
"@odata.type":"#microsoft_language_tokenizer",
"language":"icelandic",
"isSearchTokenizer":false,
}
],
"tokenFilters":(optional)[
{
"name":"ApostropheFilter",
"@odata.type":"#apostrophe"
}
]
测试自定义分析器
将自定义分析器定义为索引的一部分后,可以使用 REST API 的“分析文本”函数提交测试文本并确保分析器正确返回标记。 使用任何 REST 测试工具来制定这些请求,例如常用的 Postman 应用程序。
测试 REST 请求应如下所示:
POST https://<search service name>.search.windows.net/indexes/<index name>/analyze?api-version=<api-version>
Content-Type: application/json
api-key: <api key>
在此请求中:
- 将
<search service name>
替换为 AI 搜索资源的名称。 - 将
<index name>
替换为包含自定义分析器的索引的名称。 - 将
<api-version>
替换为 REST API 的版本号。 - 将
<api-key>
替换为 AI 搜索资源的访问密钥。 可以从 Azure 门户获取此密钥。
请求还必须包含如下所示的 JSON 正文:
{
"text": "Test text to analyze.",
"analyzer": "<analyzer name>"
}
将 <analyzer name>
替换为定义自定义分析器时指定的名称。 请务必使用许多不同的 text
值进行测试,直到确定自定义分析器的行为如同预期。
对字段使用自定义分析器
定义并测试自定义分析器后,可以将索引配置为使用它。 可以为索引中的每个字段指定分析器。
想要使用同一分析器进行索引和搜索时,可以使用 analyzer
字段:
"fields": [
{
"name": "IcelandicDescription",
"type": "Edm.String",
"retrievable": true,
"searchable": true,
"analyzer": "ContosoAnalyzer",
"indexAnalyzer": null,
"searchAnalyzer": null
},
在为字段编制索引和搜索字段时,也可以使用其他分析器。 如果在为字段编制索引和分析查询时需要一组不同的处理步骤,请使用此配置:
"fields": [
{
"name": "IcelandicDescription",
"type": "Edm.String",
"retrievable": true,
"searchable": true,
"analyzer": null,
"indexAnalyzer": "ContosoIndexAnalyzer",
"searchAnalyzer": "ContosoSearchAnalyzer"
},
了解详细信息
将自定义分析器添加到 Azure AI 搜索索引中的字符串字段