Unicode 字符折叠 | Elasticsearch: 权威指南 | Elastic
2024-12-24
在多语言((("Unicode", "character folding")))((("tokens", "normalizing", "Unicode character folding")))处理中,`lowercase` 语汇单元过滤器(token filters)是一个很好的开始。但是作为对比的话,也只是对于整个巴别塔的惊鸿一瞥。所以 <<asciifolding-token-filter,`asciifolding` token filter>> 需要更有效的Unicode _字符折叠_ (_character-folding_)工具来处理全世界的各种语言。((("asciifolding token filter")))
`icu_folding` 语汇单元过滤器(token filters) (provided by the <<icu-plugin,`icu` plug-in>>)的功能和 `asciifolding` 过滤器一样, ((("icu_folding token filter")))但是它扩展到了非ASCII编码的语言,例如:希腊语,希伯来语,汉语。它把这些语言都转换对应拉丁文字,甚至包含它们的各种各样的计数符号,象形符号和标点符号。
`icu_folding` 语汇单元过滤器(token filters)自动使用 `nfkc_cf` 模式来进行大小写折叠和Unicode归一化(normalization),所以不需要使用 `icu_normalizer` :
PUT /my_index { "settings": { "analysis": { "analyzer": { "my_folder": { "tokenizer": "icu_tokenizer", "filter": [ "icu_folding" ] } } } } } GET /my_index/_analyze?analyzer=my_folder ١٢٣٤٥
如果你有指定的字符不想被折叠,你可以使用 UnicodeSet(像字符的正则表达式) 来指定哪些Unicode才可以被折叠。例如:瑞典单词 å
,ä
, ö
, Å
, Ä
, 和 Ö
不能被折叠,你就可以设定为: [^åäöÅÄÖ]
(^
表示 不包含)。这样就会对于所有的Unicode字符生效。
官方地址:https://www.elastic.co/guide/cn/elasticsearch/guide/current/character-folding.html