You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

修改Elasticsearch的ASCII Folding Token Filter,将Ə/ə映射为E/e

解决Elasticsearch中Ə/ə字符折叠为E/e的问题

刚好处理过一模一样的场景——默认的ASCII Folding Token Filter会把Ə(U+018F)和ə(U+0259)折叠成A/a,但我们需要让它们映射到E/e,同时还要保留原字符。用char_filter确实没法同时满足修改映射和保留原字符的需求,所以咱们可以通过自定义分析器来实现:

具体实现步骤

  1. 自定义ASCII折叠过滤器:创建一个带自定义映射的asciifolding过滤器,明确指定Ə/ə要映射到E/e,同时开启preserve_original: true来保留原始字符。
  2. 替换默认分析器:把这个自定义过滤器配置到索引的默认分析器中,确保所有文本都会按这个规则处理。

执行配置命令

直接运行以下curl命令来更新目标索引(这里以myix为例)的设置:

curl -XPUT 'localhost:9200/myix/_settings?pretty' -H 'Content-Type: application/json' -d'
{
  "analysis" : {
    "analyzer" : {
      "default" : {
        "tokenizer" : "standard",
        "filter" : ["standard", "my_ascii_folding"]
      }
    },
    "filter" : {
      "my_ascii_folding" : {
        "type" : "asciifolding",
        "preserve_original" : true,
        "mapping" : [
          "Ə=>E",
          "ə=>e"
        ]
      }
    }
  }
}
'

关键细节说明

  • mapping参数:默认的asciifolding过滤器里,Ə/ə是映射到A/a的,所以必须通过这个参数手动覆盖映射规则,才能让它们转成E/e
  • preserve_original: true:这个配置会让过滤器同时输出原始字符和折叠后的字符,这样无论是搜索原始的Ələ还是折叠后的Ele,都能匹配到对应的文档,完美解决char_filter无法保留原字符的问题。

验证效果

可以用_analyze接口测试分析器是否生效:

curl -XGET 'localhost:9200/myix/_analyze?pretty' -H 'Content-Type: application/json' -d'
{
  "analyzer": "default",
  "text": "Ələ"
}
'

返回的tokens里应该会包含Ələ(原始字符)和Ele(折叠后字符),这就说明配置成功了。

内容的提问来源于stack exchange,提问作者nikli

火山引擎 最新活动