请注意:
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
Unicode 大小写折叠
editUnicode 大小写折叠
edit人类没有创造力的话就不会是人类, 而人类的语言就恰恰反映了这一点。
处理一个单词的大小写看起来是一个简单的任务,除非遇到需要处理多语言的情况。
那就举一个例子:转换小写德国单词 ß
。把它转换成大写是 SS
,然后在转换成小写就成了 ss
。还有一个例子:转换希腊字母 ς
(sigma, 在单词末尾使用)。把它转换成大写是 Σ
,然后再转换成小写就成了 σ
。
把词条小写的核心是让他们看起来更像,而不是更不像。在Unicode中,这个工作是大小写折叠(case folding)来完成的,而不是小写化(lowercasing)。 大小写折叠 (Case folding) 把单词转换到一种(通常是小写)形式,是让写法不会影响单词的比较,所以拼写不需要完全正确。
例如:单词 ß
,已经是小写形式了,会被_折叠_(folded)成 ss
。类似的小写的 ς
被折叠成 σ
,这样的话,无论 σ
, ς
, 和 `Σ`出现在哪里, 他们就都可以比较了。
`icu_normalizer` 语汇单元过滤器默认的归一化(normalization)模式是 `nfkc_cf`。它像 `nfkc` 模式一样:
- 组合 (Composes) 字符用最短的字节来表示。
-
用 兼容 (compatibility)模式,把像
ffi
的字符转换成简单的ffi
但是,也会这样做:
- 大小写折叠 (Case-folds) 字符成一种适合比较的形式
换句话说, nfkc_cf`等价于 `lowercase
语汇单元过滤器(token filters),但是却适用于所有的语言。 on-steroids 等价于 standard
分析器,例如:
PUT /my_index { "settings": { "analysis": { "analyzer": { "my_lowercaser": { "tokenizer": "icu_tokenizer", "filter": [ "icu_normalizer" ] } } } } }
我们来比较 Weißkopfseeadler`和 `WEISSKOPFSEEADLER
(大写形式) 分别通过 `standard`分析器和我们的Unicode自识别(Unicode-aware)分析器处理得到的结果: