ICU Analysis插件是一组将Lucene ICU模块集成到Elasticsearch中的库。 本质上,ICU的目的是增加对Unicode和全球化的支持,以提供对亚洲语言更好的文本分割分析。 从Elasticsearch的角度来看,此插件提供了文本分析中的新组件,如下表所示:
安装
我们可以首先到Elasticsearch的安装目录打入如下的命令:
1 | $ pwd |
上面显示我已经安装好了三个插件。上面的analysis-ik及pinyin都是为中文而准备的。
注意:如果你们在使用上面的elasticsearch-plug list命名出现如下的错误的话:
那么请使用如下的命令来删除在当前目录下的.DS_Store目录:
1 | sudo find /Path/to/your/elasticsearch-folder -name ".DS_Store" -depth -exec rm {} \; |
然后重新运行上面的命令就不会有问题了。
上面显示我已经安装好了。如果在你的电脑里没有安装好,可以使用如下的命令来进行安装:
1 | ./bin/elasticsearch-plugin install analysis-icu |
上面的命令在Elasticsearch的安装目录里进行运行。等安装好后,我们需要重新启动Elasticsearch让它起作用。重新运行:
1 | ./bin/elasticsearch-plugin list |
来检查analysis-icu是否已经被成功安装好了。
例子
等我们完全安装好了analysis_icu,那么,我们可以使用如下的例子在Kibana中来做一个实验:
1 | POST _analyze |
那么显示的结果是:
上面显示,我们analysis可以正确地帮我们把中文词语安装中文的分词方法正确地进行分词。
我们可以和standard分词器来进行一个比较:
我们从上面可以看出来,在默认的情况下,icu_analyzer通常是一个及以上的字符的token,而standard的analyzer只有一个字符。
通过更改字符过滤器和token的方法和模式参数,ICU分析器可以具有多种自定义变量类型。 下表描述了不同类型的ICU分析仪的组合:
让我们尝试nfkd_normalized分析器。 遵循定义并在Kibana Dev Tools控制台中对其进行测试。 响应显示在以下屏幕截图中。 但是,由于使用nfkd_normalized分析器和icu_analyzer分析器,我们无法在结果中找到任何差异:
1 | POST _analyze |
运行结果:
1 | { |
要使用新定义的分析器,我们必须在Index setting中对其进行定义。请参阅我之前的文章“Elasticsearch: analyzer”。