Elasticsearch-analysis-ik分词器的安装及使用
前面我们讲到了以及一些简单的操作语法。今天我们介绍一下怎么使用Elasticsearch-analysis-ik分词器实现一个简单的中文分词。
Elasticsearch 内置的分词器对中文不友好,会把中文分成单个字来进行全文检索,不能达到想要的结果,在全文检索及新词发展如此快的互联网时代,IK可以进行友好的分词及自定义分词。
IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版,目前支持最新版本的ES6.X版本。
ik 带有两个分词器
ik_max_word :会将文本做最细粒度的拆分;尽可能多的拆分出词语ik_smart:会做最粗粒度的拆分;已被分出的词语将不会再次被其它词语占有安装Elasticsearch-analysis-ik
Centos环境下:
$ cd /usr/share/elasticsearch-6.5.0/plugins $ wget https://github.com/medcl/elasticsearch-analysis-ik/archive/v6.5.0.tar.gz $ tar -xvzf v6.5.0.tar.gz复制代码
安装成功后重启ES
$ ps -ef | grep elasticsearch $ kill -9 [进程号] $ su es $ cd /usr/share/elasticsearch/bin$ ./elasticsearch -d复制代码
简单测试
curl -H 'Content-Type:application/json' 'http://localhost:9200/index/_analyze?pretty=true' -d'{ "analyzer": "ik_smart", "text": "中华人民共和国万岁万岁万万岁"}'复制代码
看一下结果
{ "tokens" : [ { "token" : "中华人民共和国", "start_offset" : 0, "end_offset" : 7, "type" : "CN_WORD", "position" : 0 }, { "token" : "万岁", "start_offset" : 7, "end_offset" : 9, "type" : "CN_WORD", "position" : 1 }, { "token" : "万岁", "start_offset" : 9, "end_offset" : 11, "type" : "CN_WORD", "position" : 2 }, { "token" : "万万岁", "start_offset" : 11, "end_offset" : 14, "type" : "CN_WORD", "position" : 3 } ]}复制代码
可以看出。我们实现了简单的中文分词
但是我们想要一些特定的分词功能呢?比如说自己定义的一些名词,不想让分词器拆分怎么办呢?比如说这里的筱筱,我就不想让他拆分开怎么办呢?curl -H 'Content-Type: application/json' -XGET 'localhost:9200/_analyze?pretty' -d '{"analyzer":"ik_smart","text":"筱筱的公众号"}'复制代码
看效果
{ "tokens" : [ { "token" : "筱", "start_offset" : 0, "end_offset" : 1, "type" : "CN_CHAR", "position" : 0 }, { "token" : "筱", "start_offset" : 1, "end_offset" : 2, "type" : "CN_CHAR", "position" : 1 }, { "token" : "的", "start_offset" : 2, "end_offset" : 3, "type" : "CN_CHAR", "position" : 2 }, { "token" : "公众", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 3 }, { "token" : "号", "start_offset" : 5, "end_offset" : 6, "type" : "CN_CHAR", "position" : 4 } ]}复制代码
遇到这种情况,我们可以使用analysis-ik 支持自定义词库;增加自定义词库。
analysis-ik自定义词库
进入ES安装目录下的config/analysis-ik目录。
$ cd /usr/share/elasticsearch/config/analysis-ik复制代码
新建自定义词库文件
$ vi my.dic 筱筱:wq复制代码
修改IKAnalyzer.cfg.xml配置文件
$ vim IKAnalyzer.cfg.xml复制代码
文件内容如下,将新建的my.dic文件放入ext_dict下。
复制代码 IK Analyzer 扩展配置 my.dic
重启ES
在进行验证刚刚的例子
curl -H 'Content-Type: application/json' -XGET 'localhost:9200/_analyze?pretty' -d '{"analyzer":"ik_smart","text":"筱筱的公众号"}'复制代码
结果如下:
{ "tokens" : [ { "token" : "筱筱", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 0 }, { "token" : "的", "start_offset" : 2, "end_offset" : 3, "type" : "CN_CHAR", "position" : 1 }, { "token" : "公众", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 2 }, { "token" : "号", "start_offset" : 5, "end_offset" : 6, "type" : "CN_CHAR", "position" : 3 } ]}复制代码
从结果中可以看出,就不会把我自定义的词汇给拆分开了。简单的分词用法就写到这里。
如果有什么好的建议或者意见请关注公众号