ASCII 折叠令牌过滤器
asciifolding
令牌过滤器将非 ASCII 字符转换为最接近的 ASCII 等效字符。例如,é 变为 e,ü 变为 u,ñ 变为 n。此过程称为音译。
asciifolding
令牌过滤器具有多项优势:
- 增强搜索灵活性:用户在输入查询时经常会忽略重音或特殊字符。
asciifolding
令牌过滤器可确保此类查询仍能返回相关结果。 - 标准化:通过确保带重音的字符始终转换为其 ASCII 等效字符来标准化索引过程。
- 国际化:对于包含多种语言和字符集的应用程序特别有用。
虽然 asciifolding
令牌过滤器可以简化搜索,但它也可能导致特定信息的丢失,特别是当数据集中带重音字符和非带重音字符之间的区别很重要时。
参数
您可以使用 preserve_original
参数配置 asciifolding
令牌过滤器。将此参数设置为 true
可在令牌流中同时保留原始令牌及其 ASCII 折叠版本。当您希望在搜索查询中同时匹配术语的原始版本(带重音)和规范化版本(不带重音)时,这会特别有用。默认值为 false
。
示例
以下示例请求创建一个名为 example_index
的新索引,并定义一个分析器,其中包含 asciifolding
过滤器和设置为 true
的 preserve_original
参数:
PUT /example_index
{
"settings": {
"analysis": {
"filter": {
"custom_ascii_folding": {
"type": "asciifolding",
"preserve_original": true
}
},
"analyzer": {
"custom_ascii_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"custom_ascii_folding"
]
}
}
}
}
}
生成的词元
使用以下请求检查使用该分析器生成的词元
POST /example_index/_analyze
{
"analyzer": "custom_ascii_analyzer",
"text": "Résumé café naïve coördinate"
}
响应包含生成的词元
{
"tokens": [
{
"token": "resume",
"start_offset": 0,
"end_offset": 6,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "résumé",
"start_offset": 0,
"end_offset": 6,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "cafe",
"start_offset": 7,
"end_offset": 11,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "café",
"start_offset": 7,
"end_offset": 11,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "naive",
"start_offset": 12,
"end_offset": 17,
"type": "<ALPHANUM>",
"position": 2
},
{
"token": "naïve",
"start_offset": 12,
"end_offset": 17,
"type": "<ALPHANUM>",
"position": 2
},
{
"token": "coordinate",
"start_offset": 18,
"end_offset": 28,
"type": "<ALPHANUM>",
"position": 3
},
{
"token": "coördinate",
"start_offset": 18,
"end_offset": 28,
"type": "<ALPHANUM>",
"position": 3
}
]
}