我正在用带有“José”等重音的字符索引网页上的所有名称。我希望能够使用“Jose”和“José”搜索此名称。

如何为具有一个字段“名称”的简单索引设置索引映射和分析器?

我为名称字段设置了一个分析器,如下所示:

"analyzer": {
  "folding": {
    "tokenizer": "standard",
    "filter": ["lowercase", "asciifolding"]
   }
 }

但是,它将所有重音折叠为ASCII等效项,并且在索引“é”时忽略了该重音。我希望将“é”字符放入索引中,并且希望能够用“José”或“Jose”搜索“José”

谢谢

最佳答案

您需要保留带有重音符号的原始 token 。为此,您需要重新定义自己的asciifolding token 过滤器,如下所示:

PUT /my_index
{
    "settings" : {
        "analysis" : {
            "analyzer" : {
                "folding" : {
                    "tokenizer" : "standard",
                    "filter" : ["lowercase", "my_ascii_folding"]
                }
            },
            "filter" : {
                "my_ascii_folding" : {
                    "type" : "asciifolding",
                    "preserve_original" : true
                }
            }
        }
    },
    "mappings": {
        "my_type": {
            "properties": {
                "name": {
                    "type": "text",
                    "analyzer": "folding"
                }
            }
        }
    }
}

之后, token josejosé都将被索引并可以搜索

10-08 16:32