Elasticsearch修改asciifolding

时间:2018-04-19 10:02:56

标签: elasticsearch unicode full-text-search ascii

ASCII折叠令牌过滤器将“Ə”/“ə”(U + 018F / U + 0259)字符折叠为“A”/“a”。我需要修改或添加折叠到“E”/“e”。 char_filter没有帮助,也没有保留原始

添加分析器:

curl -XPUT 'localshot: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
                }
            }
        }
}
'

测试结果:

http://localhost:9200/myix/_analyze?text=üöğıəçşi_ÜÖĞIƏÇŞİ&filter=my_ascii_folding

{
  "tokens": [
    {
      "token": "uogiacsi_UOGIACSI",
      "start_offset": 0,
      "end_offset": 17,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "üöğıəçşi_ÜÖĞIƏÇŞİ",
      "start_offset": 0,
      "end_offset": 17,
      "type": "<ALPHANUM>",
      "position": 0
    }
  ]
}

1 个答案:

答案 0 :(得分:2)

在查看Lucene的ASCIIFoldingFilter.java源文件时,Ə似乎不会折叠成E而不是A。即使ICU folding filter对于类固醇asciifolding,也会进行相同的折叠。

但是,主题上有一个interesting discussion,看来发音应该折叠成a而不是e

  

快速搜索英语或法语维基百科,它目前被折叠,表明它被折叠成了一个!我本来期望一个基于正字法的e,但在发音方面是有意义的(至少在英语中)。

其他人甚至认为ae都没有意义:

  

这似乎是一个非常糟糕的决定。我认为should不应该折叠成一个或一个。

无论如何,除了使用char_filter或extending the ASCIIFoldingFilter并将其自身捆绑到ES分析插件中之外,我认为没有办法。