你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
自定义分析器是纯文本内容的词法分析的一部分。 它是一个 tokenizer、一个或多个令牌筛选器以及一个或多个字符筛选器的用户定义组合。 自定义分析器是在搜索索引中指定的,然后在需要自定义分析的字段定义中由名称引用。 将根据每个字段调用自定义分析器。 字段上的属性将确定其是用于索引和/或查询。
在自定义分析器中,字符筛选器先准备输入文本,然后由 tokenizer 对其进行处理(例如,删除标记)。 接下来,tokenizer 将文本分解为标记。 最后,标记筛选器修改由 tokenizer 发出的标记。 有关概念和示例,请参阅 Azure AI 搜索中的分析器以及教程:为电话号码创建自定义分析器。
为什么要使用自定义分析器?
在经典搜索工作流中,应考虑自定义分析器,这些工作流不包含大型语言模型及其处理内容异常的能力。
在类搜索中,自定义分析器允许你控制将纯文本转换为可索引和可搜索令牌的过程,方法是选择要调用的分析或筛选类型以及它们发生的顺序。
如果默认 (Standard Lucene)、内置或语言分析器都不能满足你需求,则创建并分配自定义分析器。 如果要将内置分析器与自定义选项一同使用,还可以创建自定义分析器。 例如,如果要更改 Standard 上的 maxTokenLength,可以使用用户定义的名称创建自定义分析器以设置该选项。
在下列情况下,自定义分析器可能很有用处:
在文本输入被标记之前使用字符筛选器删除 HTML 标记,或者替换特定字符或符号。
拼音搜索。 添加一个拼音筛选器,以便根据字词的发音方式而不是拼写方式进行搜索。
禁用词法分析。 使用关键字分析器创建未分析的可搜索字段。
快速前缀/后缀搜索。 添加 Edge N 元语法标记筛选器以对字词前缀编制索引,从而启用快速前缀匹配。 将其与反向标记筛选器组合使用,以执行后缀匹配。
自定义词汇切分。 例如,借助空格 tokenizer,通过将空格用作分隔符来将句子分解成标记
ASCII 折叠。 添加标准 ASCII 折叠筛选器以规范化搜索词中的音调符号,如 ö 或 ê。
注意
自定义分析器不会在 Azure 门户中公开。 添加自定义分析器的唯一方法是通过创建索引架构的代码。
创建自定义分析器
若要创建自定义分析器,请设计时在索引的 analyzers 部分指定它,然后使用 Edm.String 属性或者 analyzer 和 indexAnalyzer 对在可搜索的 searchAnalyzer 字段上引用它。
分析器定义包括名称、类型、一个或多个字符筛选器、最多一个 tokenizer,以及一个或多个用于后期词汇切分处理的标记筛选器。 字符筛选器在词汇切分前应用。 标记筛选器和字符筛选器按从左到右的顺序应用。
自定义分析器中的名称必须是唯一的,并且不能与内置分析器、tokenizer、标记筛选器或字符筛选器中的任一者相同。 名称包含字母、数字、空格、短划线或下划线字符。 名称首尾都必须为纯文本字符。 名称长度必须少于 128 个字符。
类型必须是 #Microsoft.Azure.Search.CustomAnalyzer。
charFilters可以是字符筛选器中的一个或多个筛选器,这些筛选器按照提供的顺序在词汇切分之前进行处理。 某些字符筛选器包含选项,可在charFilters部分设置这些选项。 字符筛选器是可选的。tokenizer正好是一个 Tokenizer。 值是必选的。 如果需要多个 tokenizer,则可以创建多个自定义分析器,并在索引架构中逐个字段地分配它们。tokenFilters可以是标记筛选器中的一个或多个筛选器,这些筛选器按照提供的顺序在词汇切分之后进行处理。 对于具有选项的标记筛选器,添加tokenFilter部分以指定配置。 标记筛选器是可选的。
分析器不得生成超过300个字符的标记,否则索引将失败。 若要剪裁或排除长标记,请分别使用 “TruncateTokenFilter” 和 “LengthTokenFilter”。 请参阅标记筛选器进行参考。
"analyzers":(optional)[
{
"name":"name of analyzer",
"@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
"charFilters":[
"char_filter_name_1",
"char_filter_name_2"
],
"tokenizer":"tokenizer_name",
"tokenFilters":[
"token_filter_name_1",
"token_filter_name_2"
]
},
{
"name":"name of analyzer",
"@odata.type":"#analyzer_type",
"option1":value1,
"option2":value2,
...
}
],
"charFilters":(optional)[
{
"name":"char_filter_name",
"@odata.type":"#char_filter_type",
"option1":value1,
"option2":value2,
...
}
],
"tokenizers":(optional)[
{
"name":"tokenizer_name",
"@odata.type":"#tokenizer_type",
"option1":value1,
"option2":value2,
...
}
],
"tokenFilters":(optional)[
{
"name":"token_filter_name",
"@odata.type":"#token_filter_type",
"option1":value1,
"option2":value2,
...
}
]
在索引定义中,可以将此节放在创建索引请求正文中的任意位置,但通常将它放在末尾:
{
"name": "name_of_index",
"fields": [ ],
"suggesters": [ ],
"scoringProfiles": [ ],
"defaultScoringProfile": (optional) "...",
"corsOptions": (optional) { },
"analyzers":(optional)[ ],
"charFilters":(optional)[ ],
"tokenizers":(optional)[ ],
"tokenFilters":(optional)[ ]
}
分析器定义是较大索引的一部分。 只有在设置自定义选项时,才向索引添加字符筛选器、tokenizer 和标记筛选器的定义。 若要按原样使用现有筛选器或 tokenizer,请在分析器定义中按名称指定它。 有关详细信息,请参阅创建索引 (REST)。 有关更多示例,请参阅在 Azure AI 搜索中添加分析器。
测试自定义分析器
可以使用测试分析器 (REST) 来查看分析器如何将给定文本分解成多个标记。
请求
POST https://[search service name].search.windows.net/indexes/[index name]/analyze?api-version=[api-version]
Content-Type: application/json
api-key: [admin key]
{
"analyzer":"my_analyzer",
"text": "Vis-à-vis means Opposite"
}
响应
{
"tokens": [
{
"token": "vis_a_vis",
"startOffset": 0,
"endOffset": 9,
"position": 0
},
{
"token": "vis_à_vis",
"startOffset": 0,
"endOffset": 9,
"position": 0
},
{
"token": "means",
"startOffset": 10,
"endOffset": 15,
"position": 1
},
{
"token": "opposite",
"startOffset": 16,
"endOffset": 24,
"position": 2
}
]
}
更新自定义分析器
定义分析器、tokenizer、标记筛选器或字符筛选器后,便无法修改它。 仅当 allowIndexDowntime 标志在索引更新请求中设置为 true 时,才可向现有索引添加新的上述内容:
PUT https://[search service name].search.windows.net/indexes/[index name]?api-version=[api-version]&allowIndexDowntime=true
此操作将使索引离线至少几秒钟,从而导致索引和查询请求失败。 索引的性能和写入可用性可能会在更新索引后的几分钟内处于受损状态,对于非常大的索引,持续时间更长,但这些影响只是暂时的,最终将自行解除。
内置分析器
如果要使用具有自定义选项的内置分析器,则创建自定义分析器是用于指定这些选项的机制。 相反,若要按原样使用内置分析器,只需在字段定义中按名称引用即可。
| analyzer_name | analyzer_type1 | 说明和选项 |
|---|---|---|
| 关键词 | (仅当有可用的选项时,类型才适用) | 将某个字段的整个内容视为单个标记。 此分析器可用于邮政编码、ID 和某些产品名称等数据。 |
| 模式 | 模式分析器 | 通过正则表达式模式将文本灵活地分解成多个词条。 选项 lowercase (type: bool) - 确定词条是否为小写。 默认值为 true。 pattern (type: string) - 用于匹配标记分隔符的正则表达式模式。 默认值为 \W+,与非字词字符匹配。 flags (type: string) - 正则表达式标志。 默认值为空字符串。 允许的值:CANON_EQ、CASE_INSENSITIVE、COMMENTS、DOTALL、LITERAL、MULTILINE、UNICODE_CASE、UNIX_LINES stopwords (type: string array) - 非索引字列表。 默认为空列表。 |
| 简单 | (仅当有可用的选项时,类型才适用) | 在非字母处划分文本并将其转换为小写。 |
| 标准 (也称为 standard.lucene) |
StandardAnalyzer | 标准 Lucene 分析器,由标准 tokenizer、小写筛选器和停止筛选器组成。 选项 maxTokenLength (type: int) - 最大标记长度。 默认值为 255。 超过最大长度的标记将被拆分。 可以使用的最大标记长度为 300 个字符。 stopwords (type: string array) - 非索引字列表。 默认为空列表。 |
| standardasciifolding.lucene | (仅当有可用的选项时,类型才适用) | 带 Ascii 折叠筛选器的标准分析器。 |
| 停 | 停止分析器 | 在非字母处划分文本,应用小写和非索引字标记筛选器。 选项 stopwords (type: string array) - 非索引字列表。 默认值为英语预定义列表。 |
| 空白 | (仅当有可用的选项时,类型才适用) | 使用空格 tokenizer 的分析器。 超过 255 个字符的标记将被拆分。 |
1 分析器类型在代码中始终使用前缀 #Microsoft.Azure.Search,以使 PatternAnalyzer 实际指定为 #Microsoft.Azure.Search.PatternAnalyzer。 为简洁起见,我们删除了该前缀,但在代码中需要使用该前缀。
analyzer_type 仅适用于可自定义的分析器。 如果没有选项(比如关键字分析器),则没有关联的 #Microsoft.Azure.Search 类型。
字符筛选器
字符筛选器在字符串到达标记器之前添加处理。
Azure AI 搜索支持以下列表中的字符筛选器。 有关各自的详细信息,请参阅 Lucene API 参考。
| char_filter_name | char_filter_type1 | 说明和选项 |
|---|---|---|
| html_strip | (仅当有可用的选项时,类型才适用) | 一个字符筛选器,它尝试去除 HTML 构造。 |
| 映射 | MappingCharFilter | 一个字符筛选器,它应用使用 mappings 选项定义的映射。 匹配具有贪婪性(给定点的最长模式匹配获胜)。 允许替换为空字符串。 选项 mappings (type: string array) - 以下格式的映射列表: a=>b(出现的所有字符 a 均替换为字符 b)。 必需。 |
| pattern_replace | PatternReplaceCharFilter | 一个字符筛选器,用于替换输入字符串中的字符。 它使用正则表达式来标识要保留的字符序列,并使用替换模式来标识要替换的字符。 例如,输入文本 = aa bb aa bb,模式=(aa)\\\s+(bb) 替换=$1#$2,结果 = aa#bb aa#bb。 选项 pattern (type: string) - 必需。 replacement (type: string) - 必需。 |
1 字符筛选器类型在代码中始终使用前缀 #Microsoft.Azure.Search,以使 MappingCharFilter 实际指定为 #Microsoft.Azure.Search.MappingCharFilter。 为缩小表的宽度,我们删除了该前缀,但请记住在代码中包含该前缀。 请注意,char_filter_type 仅适用于可自定义的筛选器。 如果没有选项(比如 html_strip),则没有关联的 #Microsoft.Azure.Search 类型。
Tokenizer
Tokenizer 将连续文本划分为一系列标记,例如将一个句子分解成多个字词,或者将一个单词分解为字根形式。
Azure AI 搜索支持以下列表中的 tokenizer。 有关各自的详细信息,请参阅 Lucene API 参考。
| tokenizer_name | tokenizer_type1 | 说明和选项 |
|---|---|---|
| 经典 | 经典分词器 | 基于语法的 tokenizer,适合处理大多数欧洲语言文档。 选项 maxTokenLength (type: int) - 最大标记长度。 默认值:255,最大值:300。 超过最大长度的标记将被拆分。 |
| edgeNGram | EdgeNGramTokenizer | 将来自 Edge 的输入标记为给定大小的 n 元语法。 选项 minGram (type: int) - 默认值:1,最大值:300。 maxGram (type: int) - 默认值:2,最大值:300。 必须大于 minGram。 tokenChars (type: string array) - 要保留在标记中的字符类。 允许的值: letter、digit、whitespace、punctuation、symbol。 默认为空数组 - 保留所有字符。 |
| keyword_v2 | KeywordTokenizerV2 | 将整个输入作为单个标记发出。 选项 maxTokenLength (type: int) - 最大标记长度。 默认值:256,最大值:300。 超过最大长度的标记将被拆分。 |
| 信 | (仅当有可用的选项时,类型才适用) | 在非字母处划分文本。 超过 255 个字符的标记将被拆分。 |
| 小写 | (仅当有可用的选项时,类型才适用) | 在非字母处划分文本并将其转换为小写。 超过 255 个字符的标记将被拆分。 |
| microsoft_language_tokenizer | MicrosoftLanguageTokenizer (语言标记器) | 使用特定于语言的规则划分文本。 选项 maxTokenLength (type: int) - 最大标记长度,默认值:255,最大值:300。 超过最大长度的标记将被拆分。 首先将超过 300 个字符的标记拆分为长度为 300 的标记,然后根据设置的 maxTokenLength 逐一拆分这些标记。 isSearchTokenizer (type: bool) - 如果用作搜索 tokenizer,则设置为 true;如果用作索引 tokenizer,则设置为 false。 language (type: string) - 要使用的语言,默认值为 english。 允许的值包括:bangla、bulgarian、catalan、chineseSimplified、chineseTraditional、croatian、czech、danish、dutch、english、french、german、greek、gujarati、hindi、icelandic、indonesian、italian、japanese、kannada、korean、malay、malayalam、marathi、norwegianBokmaal、polish、portuguese、portugueseBrazilian、punjabi、romanian、russian、serbianCyrillic、serbianLatin、slovenian、spanish、swedish、tamil、telugu、thai、ukrainian、urdu、vietnamese |
| microsoft_language_stemming_tokenizer | MicrosoftLanguageStemmingTokenizer | 使用特定于语言的规则划分文本,并将各字词缩减为其原形。 此 tokenizer 执行词形还原。 选项 maxTokenLength (type: int) - 最大标记长度,默认值:255,最大值:300。 超过最大长度的标记将被拆分。 首先将超过 300 个字符的标记拆分为长度为 300 的标记,然后根据设置的 maxTokenLength 逐一拆分这些标记。 isSearchTokenizer (type: bool) - 如果用作搜索 tokenizer,则设置为 true;如果用作索引 tokenizer,则设置为 false。 language (type: string) - 要使用的语言,默认值为 english。 允许的值包括:arabic、bangla、bulgarian、catalan、croatian、czech、danish、dutch、english、estonian、finnish、french、german、greek、gujarati、hebrew、hindi、hungarian、icelandic、indonesian、italian、kannada、latvian、lithuanian、malay、malayalam、marathi、norwegianBokmaal、polish、portuguese、portugueseBrazilian、punjabi、romanian、russian、serbianCyrillic、serbianLatin、slovak、slovenian、spanish、swedish、tamil、telugu、turkish、ukrainian、urdu |
| nGram | NGramTokenizer | 将输入标记为给定大小的 n 元语法。 选项 minGram (type: int) - 默认值:1,最大值:300。 maxGram (type: int) - 默认值:2,最大值:300。 必须大于 minGram。 tokenChars (type: string array) - 要保留在标记中的字符类。 允许的值: letter、digit、whitespace、punctuation、symbol。 默认为空数组 - 保留所有字符。 |
| path_hierarchy_v2 | PathHierarchyTokenizerV2 | 用于路径式层次结构的 tokenizer。 选项 delimiter (type: string) - 默认值:'/。 replacement (type: string) - 如果设置该选项,则替换分隔符字符。 默认值与分隔符的值相同。 maxTokenLength (type: int) - 最大标记长度。 默认值:300,最大值:300。 长度超过 maxTokenLength 的路径将被忽略。 reverse (type: bool) - 如果为 true,则按相反顺序生成标记。 默认值:false。 skip (type: bool) - 要跳过的初始标记。 默认值为 0。 |
| 模式 | PatternTokenizer | 此 tokenizer 使用正则表达式模式匹配来构造不同的标记。 选项 pattern (type: string) - 用于匹配标记分隔符的正则表达式模式。 默认值为 \W+,与非字词字符匹配。 flags (type: string) - 正则表达式标志。 默认值为空字符串。 允许的值:CANON_EQ、CASE_INSENSITIVE、COMMENTS、DOTALL、LITERAL、MULTILINE、UNICODE_CASE、UNIX_LINES group (type: int) - 要提取到标记中的组。 默认值为 -1 (split)。 |
| standard_v2 | StandardTokenizerV2 | 按照 Unicode 文本分段规则划分文本。 选项 maxTokenLength (type: int) - 最大标记长度。 默认值:255,最大值:300。 超过最大长度的标记将被拆分。 |
| uax_url_email | UaxUrlEmailTokenizer | 将 URL 和电子邮件标记为一个标记。 选项 maxTokenLength (type: int) - 最大标记长度。 默认值:255,最大值:300。 超过最大长度的标记将被拆分。 |
| 空白 | (仅当有可用的选项时,类型才适用) | 在空格处划分文本。 超过 255 个字符的标记将被拆分。 |
1 Tokenizer 类型在代码中始终使用前缀 #Microsoft.Azure.Search,以使 ClassicTokenizer 实际指定为 #Microsoft.Azure.Search.ClassicTokenizer。 为缩小表的宽度,我们删除了该前缀,但请记住在代码中包含该前缀。 请注意,tokenizer_type 仅适用于可自定义的 tokenizer。 如果没有选项(比如字母 tokenizer),则没有关联的 #Microsoft.Azure.Search 类型。
标记筛选器
标记筛选器用于筛选出或修改由 tokenizer 生成的标记。 例如,可以指定将所有字符转换为小写的小写筛选器。 可以在自定义分析器中使用多个标记筛选器。 标记筛选器按其列出的顺序运行。
在下表中,使用 Apache Lucene 实现的标记筛选器已链接到相应的 Lucene API 文档。
| token_filter_name | token_filter_type1 | 说明和选项 |
|---|---|---|
| 阿拉伯语标准化 | (仅当有可用的选项时,类型才适用) | 一个标记筛选器,它应用阿拉伯语规范化程序来规范化正字法。 |
| 省略符号 | (仅当有可用的选项时,类型才适用) | 去除撇号后面的所有字符(包括撇号本身)。 |
| asciifolding | AsciiFoldingTokenFilter | 将不在前 127 个 ASCII 字符(Basic Latin Unicode 块)中的字母、数字和符号 Unicode 字符转换为其 ASCII 等效字符(如果存在)。选项 preserveOriginal (type: bool) - 如果为 true,则保留原始标记。 默认值为 false。 |
| cjk_bigram | CjkBigramTokenFilter | 形成 CJK 词条的二元语法,这些词条从 StandardTokenizer 生成。 选项 ignoreScripts (type: string array) - 要忽略的脚本。 允许的值包括: han、hiragana、katakana、hangul。 默认为空列表。outputUnigrams (type: bool) - 如果总是要输出单元语法和二元语法,则设置为 true。 默认值为 false。 |
| cjk_width | (仅当有可用的选项时,类型才适用) | 规范化 CJK 宽度差异。 将全角 ASCII 变体折叠成等效的基本拉丁语,将半角片假名变体折叠成等效的假名。 |
| 经典 | (仅当有可用的选项时,类型才适用) | 删除英语所有格,以及首字母缩写词中的点。 |
| common_grams | CommonGramTokenFilter | 在编制索引时为经常出现的词条构造二元语法。 此外,仍将为单个词条编制索引并叠加二元语法。 选项 commonWords (type: string array) - 常见字词集。 默认为空列表。 必需。 ignoreCase (type: bool) - 如果为 true,则匹配不区分大小写。 默认值为 false。 queryMode (type: bool) - 生成二元语法,然后删除常见字词和常见字词后跟的单个词条。 默认值为 false。 |
| 词典分解器 | DictionaryDecompounderTokenFilter | 分解在许多日耳曼语系中找到的复合词。 选项 wordList (type: string array) - 要匹配的字词列表。 默认为空列表。 必需。 minWordSize (type: int) - 仅处理超过此长度的字词。 默认值为 5。 minSubwordSize (type: int) - 仅输出超过此长度的子字。 默认值为 2。 maxSubwordSize (type: int) - 仅输出短于此长度的子字。 默认值为 15。 onlyLongestMatch (type: bool) - 仅添加要输出的最长匹配子字。 默认值为 false。 |
| edgeNGram_v2 | EdgeNGramTokenFilterV2 | 从输入标记的前面或后面开始生成给定大小的 n 元语法。 选项 minGram (type: int) - 默认值:1,最大值:300。 maxGram (type: int) - 默认值:2,最大值:300。 必须大于 minGram。 side (type: string) - 指定应从输入的哪一侧生成 n 元语法。 允许的值: front、back |
| elision | ElisionTokenFilter | 删除省音。 例如,“l'avion (the plane) 转换为 avion (plane)。选项 articles (type: string array) - 要删除的一组冠词。 默认为空列表。 如果没有设置冠词列表,默认情况下会删除所有法语冠词。 |
| german_normalization | (仅当有可用的选项时,类型才适用) | 根据 German2 snowball 算法的试探方法规范化德语字符。 |
| hindi_normalization | (仅当有可用的选项时,类型才适用) | 规范化印地语文本,以消除拼写变体中的一些差异。 |
| indic_normalization | IndicNormalizationTokenFilter | 规范化印地语文本的 Unicode 表示形式。 |
| keep | KeepTokenFilter | 一个标记筛选器,仅保留具有包含在指定字词列表中的文本的标记。 选项 keepWords (type: string array) - 要保留的字词列表。 默认为空列表。 必需。 keepWordsCase (type: bool) - 如果为 true,则首先小写所有字词。 默认值为 false。 |
| keyword_marker | 关键字MarkerTokenFilter | 将词条标记为关键字。 选项 keywords (type: string array) - 要标记为关键字的字词列表。 默认为空列表。 必需。 ignoreCase (type: bool) - 如果为 true,则首先小写所有字词。 默认值为 false。 |
| keyword_repeat | (仅当有可用的选项时,类型才适用) | 将每个传入标记发出两次,一次作为关键字,一次作为非关键字。 |
| kstem | (仅当有可用的选项时,类型才适用) | 适用于英语的高性能 kstem 筛选器。 |
| 长度 | LengthTokenFilter | 删除太长或太短的字词。 选项 min (type: int) - 最小数目。 默认值:0,最大值:300。 max (type: int) - 最大数目。 默认值:300,最大值:300。 |
| 限制 | Microsoft.Azure.Search.LimitTokenFilter | 编制索引时限制标记数量。 选项 maxTokenCount (type: int) - 要生成的最大标记数。 默认值为 1。 consumeAllTokens (type: bool) - 是否在达到 maxTokenCount 的情况下,还必须使用输入中的所有标记。 默认值为 false。 |
| 小写 | (仅当有可用的选项时,类型才适用) | 将标记文本规范化为小写。 |
| nGram_v2 | NGramTokenFilterV2 | 生成给定大小的 n 元语法。 选项 minGram (type: int) - 默认值:1,最大值:300。 maxGram (type: int) - 默认值:2,最大值:300。 必须大于 minGram。 |
| pattern_capture | PatternCaptureTokenFilter | 使用 Java 正则表达式发出多个标记,一个或多个模式中的每个捕获组一个标记。 选项 patterns (type: string array) - 与每个标记匹配的模式的列表。 必需。 preserveOriginal (type: bool) - 如果设置为 true,那么即使其中一个模式匹配,也返回原始标记,默认值:true |
| pattern_replace | PatternReplaceTokenFilter | 一个标记筛选器,它向流中的每个标记应用模式,并将匹配项替换为指定的替换字符串。 选项 pattern (type: string) - 必需。 replacement (type: string) - 必需。 |
| persian_normalization | (仅当有可用的选项时,类型才适用) | 为波斯语应用规范化。 |
| 语音学 | PhoneticTokenFilter (音标词过滤器) | 为拼音匹配项创建标记。 选项 encoder (type: string) - 要使用的拼音编码器。 允许的值包括 metaphone、doubleMetaphone、soundex、refinedSoundex、caverphone1、caverphone2、cologne、nysiis、koelnerPhonetik、haasePhonetik、beiderMorse。 默认:metaphone。 默认值为 metaphone。有关详细信息,请参阅编码器。 replace (type: bool) - 如果编码的标记应替换原始标记,则为 true;如果应将其添加为同义词,则为 false。 默认值为 true。 |
| porter_stem | (仅当有可用的选项时,类型才适用) | 根据 Porter 词干分解算法转换标记流。 |
| 反向 | (仅当有可用的选项时,类型才适用) | 反转标记字符串。 |
| scandinavian_normalization | (仅当有可用的选项时,类型才适用) | 规范化可互换的斯堪的纳维亚语字符的使用。 |
| scandinavian_folding | (仅当有可用的选项时,类型才适用) | 将斯堪的纳维亚语字符 åÅäæÄÆ折叠到 a,öÖøØ折叠到 o。 它还排斥双元音 aa、ae、ao、oe 和 oo 的使用,只留下第一个元音。 |
| shingle | ShingleTokenFilter | 创建标记组合作为单个标记。 选项 maxShingleSize (type: int) - 默认值为 2。 minShingleSize (type: int) - 默认值为 2。 outputUnigrams (type: bool) - 如果为 true,则输出流包含输入标记(单元语法)和瓦形。 默认值为 true。 outputUnigramsIfNoShingles (type: bool) - 如果为 true,则在没有可用瓦形时覆盖 outputUnigrams==false 的行为。 默认值为 false。 tokenSeparator (type: string) - 联接相邻标记以形成瓦形时使用的字符串。 默认值为单空格 。 filterToken (type: string) - 要为每个没有标记的位置插入的字符串。 默认为 _。 |
| 雪球 | SnowballTokenFilter (英语) | Snowball 标记筛选器。 选项 language (type: string) - 允许的值包括: armenian、basque、catalan、danish、dutch、english、finnish、french、german、german2、hungarian、italian、kp、lovins、norwegian、porter、portuguese、romanian、russian、spanish、swedish、turkish |
| sorani_normalization | SoraniNormalizationTokenFilter | 规范化 Sorani 文本的 Unicode 表示形式。选项 无。 |
| stemmer | StemmerTokenFilter | 特定于语言的词干分解筛选器。 选项 language (type: string) - 允许的值包括: - arabic- armenian- basque- brazilian- bulgarian- catalan- czech- danish- dutch- dutchKp- english- lightEnglish- minimalEnglish- possessiveEnglish- porter2- lovins- finnish- lightFinnish- french- lightFrench- minimalFrench- galician- minimalGalician- german- german2- lightGerman- minimalGerman- greek- hindi- hungarian- lightHungarian- indonesian- irish- italian- lightItalian- sorani- latvian- norwegian- lightNorwegian- minimalNorwegian- lightNynorsk- minimalNynorsk- portuguese- lightPortuguese- minimalPortuguese- portugueseRslp- romanian- russian- lightRussian- spanish- lightSpanish- swedish- lightSwedish- turkish |
| stemmer_override | StemmerOverrideTokenFilter | 所有字典词干派生形式的词条均标记为关键字,这将阻止链中的向下词干分解。 必须放在任何词干分解筛选器之前。 选项 rules (type: string array) - 采用 word => stem 格式的词干分解规则,例如 ran => run。 默认为空列表。 必需。 |
| stopwords | StopwordsTokenFilter (非索引字令牌过滤器) | 从标记流中删除非索引字。 默认情况下,该筛选器使用预定义的英语非索引字列表。 选项 stopwords (type: string array) - 非索引字列表。 如果指定了 stopwordsList,则无法指定该选项。 stopwordsList (type: string) - 一个预定义的非索引字列表。 如果指定了 stopwords,则无法指定。 允许的值包括:arabic、armenian、basque、brazilian、bulgarian、catalan、czech、danish、dutch、english、finnish、french、galician、german、greek、hindi、hungarian、indonesian、irish、italian、latvian、norwegian、persian、portuguese、romanian、russian、sorani、spanish、swedish、thai、turkish,默认值:english。 如果指定了 stopwords,则无法指定。 ignoreCase (type: bool) - 如果为 true,则首先小写所有字词。 默认值为 false。 removeTrailing (type: bool) - 如果为 true,则忽略最后一个搜索词(如果它是一个非索引字)。 默认值为 true。 |
| 同义词 | SynonymTokenFilter | 匹配标记流中的单个或多个字词同义词。 选项 synonyms (type: string array) - 必需。 以下两种格式之一的同义词列表: -incredible, unbelievable, fabulous => amazing - => 符号左侧的所有词条均替换为其右侧的所有词条。 -incredible, unbelievable, fabulous, amazing - 以逗号分隔的等效字词列表。 设置展开选项可更改此列表的解释方式。 ignoreCase (type: bool) - 用于匹配的大小写折叠输入。 默认值为 false。 expand (type: bool) - 如果为 true,则同义词列表中的所有字词(如果未使用 => 表示法)将相互映射。 以下列表:incredible, unbelievable, fabulous, amazing 等效于:incredible, unbelievable, fabulous, amazing => incredible, unbelievable, fabulous, amazing - 如果为 false,则以下列表:incredible, unbelievable, fabulous, amazing 等效于:incredible, unbelievable, fabulous, amazing => incredible。 |
| trim | (仅当有可用的选项时,类型才适用) | 剪裁标记中的前导和尾随空格。 |
| truncate | TruncateTokenFilter | 将词条截断为特定长度。 选项 length (type: int) - 默认值:300,最大值:300。 必需。 |
| 独特 | UniqueTokenFilter | 筛选出与前一个标记具有相同文本的标记。 选项 onlyOnSamePosition (type: bool) - 如果设置该选项,则仅在同一位置删除重复项。 默认值为 true。 |
| uppercase | (仅当有可用的选项时,类型才适用) | 将标记文本规范化为大写。 |
| word_delimiter | WordDelimiterTokenFilter | 将字词拆分为子字,并对子字组执行可选转换。 选项 generateWordParts (type: bool) - 导致生成字词的各个部分,例如 AzureSearch 变成 AzureSearch。 默认值为 true。generateNumberParts (type: bool) - 导致生成数字子字。 默认值为 true。 catenateWords (type: bool) - 导致运行次数最多的字词部分连接在一起,例如 Azure-Search 变成 AzureSearch。 默认值为 false。catenateNumbers (type: bool) - 导致运行次数最多的数字部分连接在一起,例如 1-2 变成 12。 默认值为 false。catenateAll (type: bool) - 导致所有子字部分连接在一起,例如 Azure-Search-1 变成 AzureSearch1。 默认值为 false。splitOnCaseChange (type: bool) - 如果为 true,则在大小写发生变化时拆分字词,例如 AzureSearch 变成 AzureSearch。 默认值为 true。preserveOriginal - 使原始字词保留并添加到子字列表中。 默认值为 false。 splitOnNumerics (type: bool) - 如果为 true,则拆分数字,例如 Azure1Search 变成 Azure1Search。 默认值为 true。stemEnglishPossessive (type: bool) - 导致为每个子字删除尾随的 's。 默认值为 true。protectedWords (type: string array) - 要防止分隔的标记。 默认为空列表。 |
1 令牌筛选器类型在代码中始终使用前缀 #Microsoft.Azure.Search,以使 ArabicNormalizationTokenFilter 实际指定为 #Microsoft.Azure.Search.ArabicNormalizationTokenFilter。 为缩小表的宽度,我们删除了该前缀,但请记住在代码中包含该前缀。