Link Search Menu Expand Document Documentation Menu

ASCII 折叠令牌过滤器

asciifolding 令牌过滤器将非 ASCII 字符转换为最接近的 ASCII 等效字符。例如,é 变为 eü 变为 uñ 变为 n。此过程称为音译

asciifolding 令牌过滤器具有多项优势:

  • 增强搜索灵活性:用户在输入查询时经常会忽略重音或特殊字符。asciifolding 令牌过滤器可确保此类查询仍能返回相关结果。
  • 标准化:通过确保带重音的字符始终转换为其 ASCII 等效字符来标准化索引过程。
  • 国际化:对于包含多种语言和字符集的应用程序特别有用。

虽然 asciifolding 令牌过滤器可以简化搜索,但它也可能导致特定信息的丢失,特别是当数据集中带重音字符和非带重音字符之间的区别很重要时。

参数

您可以使用 preserve_original 参数配置 asciifolding 令牌过滤器。将此参数设置为 true 可在令牌流中同时保留原始令牌及其 ASCII 折叠版本。当您希望在搜索查询中同时匹配术语的原始版本(带重音)和规范化版本(不带重音)时,这会特别有用。默认值为 false

示例

以下示例请求创建一个名为 example_index 的新索引,并定义一个分析器,其中包含 asciifolding 过滤器和设置为 truepreserve_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
    }
  ]
}
剩余 350 字符

有问题?

想要贡献?