简介
Elasticsearch自带standard分词法,但是这个分词法对英文支持不错,对中文支持却很差,我们可以试验一下,直接在head插件中使用复合查询,或者你也可以直接浏览器访问
http://xxx.xxx.xxx.xxx:9200/_analyze?analyzer=standard&pretty=true&text=hello 中国人
{
"tokens": [
{
"token": "hello",
"start_offset": 0,
"end_offset": 5,
"type": "",
"position": 0
},
{
"token": "中",
"start_offset": 6,
"end_offset": 7,
"type": "",
"position": 1
},
{
"token": "国",
"start_offset": 7,
"end_offset": 8,
"type": "",
"position": 2
},
{
"token": "人",
"start_offset": 8,
"end_offset": 9,
"type": "",
"position": 3
}
]
}
结果可以看到,中文的都被解析成了一个个的单字
- 如果安装了IK 的分词器会是什么样的效果呢?(先给大家看下效果)
http://xxx.xxx.xxx.xxx:9200/_analyze?analyzer=ik_max_word&pretty=true&text=hello 中国人
{
"tokens": [
{
"token": "hello",
"start_offset": 0,
"end_offset": 5,
"type": "ENGLISH",
"position": 0
},
{
"token": "中国人",
"start_offset": 6,
"end_offset": 9,
"type": "CN_WORD",
"position": 1
},
{
"token": "中国",
"start_offset": 6,
"end_offset": 8,
"type": "CN_WORD",
"position": 2
},
{
"token": "国人",
"start_offset": 7,
"end_offset": 9,
"type": "CN_WORD",
"position": 3
}
]
}
结果可以看到,中文按照一定的语义进行了拆分,这就是语义分词
安装
- IK需要使用maven来编译,所以先要安装maven,配置maven的yum源
wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
- 安装maven
yum install apache-maven
- 检测maven是否安装成功
mvn -version
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T15:58:13+08:00)
Maven home: /usr/share/apache-maven
Java version: 1.8.0_181, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.21.1.el7.x86_64", arch: "amd64", family: "unix"
- 下载 IK分词插件
https://github.com/medcl/elasticsearch-analysis-ik
注意,必须要下载当前Elasticsearch所对应的IK版本,具体的对应关系github的页面里面有说明
- 如果不记得当前安装Elasticsearch 的版本号,可以查询
http://xxx.xxx.xxx.xxx:9200
{
"name": "Cancer",
"cluster_name": "elasticsearch",
"cluster_uuid": "ji3aSaT4TAKuRO34a4twnQ",
"version": {
"number": "2.4.6",
"build_hash": "5376dca9f70f3abef96a77f4bb22720ace8240fd",
"build_timestamp": "2017-07-18T12:17:44Z",
"build_snapshot": false,
"lucene_version": "5.5.4"
},
"tagline": "You Know, for Search"
}
可以看出当前Elasticsearch的版本是 2.4.6 ,然后根据上面github地址中的说明,下载对应 1.10.6 版本的IK插件elasticsearch-analysis-ik-1.10.6.zip,我是放在 /usr/local/src 目录下的
- 解压下载包,并在解压后的文件下执行mvn package,直到打包完成
cd /usr/local/src
unzip elasticsearch-analysis-ik-1.10.6.zip
cd elasticsearch-analysis-ik-1.10.6
mvn package
然后就是漫长的等待了,感觉有十几分钟吧
- 打包完成之后,开始安装插件
- 当前目录下,进入target\releases 文件夹,里面打包生成了压缩包elasticsearch-analysis-ik-1.10.6.zip,解压之。
- 在Elasticsearch的插件目录/usr/share/elasticsearch/plugins下,新建文件夹ik
- 复制上面解压后的文件到 文件夹ik中
- 重启下Elasticsearch
systemctl restart elasticsearch
测试安装是否成功
- 按照文章开头的方法测试下中文分词的效果