1.前言
使用ES作为搜索引擎,不得不说ES默认的中文分词做的不怎么好,所以安装了网上推荐的ik中文分词器
项目git地址
2.项目环境:
JDK 1.8
Spring Boot 2.0.0.RELEASE
ElasticSearch 5.6.8
elasticsearch-analysis-ik-5.6.8
Deepin Linux 15.5
3.安装IK 中文分词器
官方给出了两种安装方法,这里再给出一种本地安装方法
1.下载
下载地址: https://github.com/medcl/elasticsearch-analysis-ik/releases
下载和ElasticSearch版本号对应
的版本,解压放到 your-es-root/plugins/
2.使用elasticsearch-plugin安装( version > v5.5.1 ):
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.8/elasticsearch-analysis-ik-5.6.8.zip
3.本地安装
从 https://github.com/medcl/elasticsearch-analysis-ik/releases 下载和ElasticSearch版本号对应
的版本的zip包
放到一个位置,比如我放到的是elasticsearch的解压目录下,然后在es目录下运行终端
cd ${ES_HOME}
./bin/elasticsearch-plugin install file:///home/suddev/elasticsearch/elasticsearch-analysis-ik-5.6.8.zip
注意,install之后的参数表示ik插件安装包所在位置,格式为file://+文件位置.zip
注意斜杠的数量
重启ElasticSearch
4.测试分词器功能
首先,ik分词器有两个ik_max_word
和ik_smart
,官方给出解释如下
ik_max_word
: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;
ik_smart
: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。
测试-直接流量器输入url使用get
http://localhost:9200/_analyze?analyzer=ik_max_word&pretty=true&text=中华人民共和国国歌
输出结果
{
"tokens": [
{
"token": "中华人民共和国",
"start_offset": 0,
"end_offset": 7,
"type": "CN_WORD",
"position": 0
},
{
"token": "中华人民",
"start_offset": 0,
"end_offset": 4,
"type": "CN_WORD",
"position": 1
},
{
"token": "中华",
"start_offset": 0,
"end_offset": 2,
"type": "CN_WORD",
"position": 2
},
{
"token": "华人",
"start_offset": 1,
"end_offset": 3,
"type": "CN_WORD",
"position": 3
},
{
"token": "人民共和国",
"start_offset": 2,
"end_offset": 7,
"type": "CN_WORD",
"position": 4
},
{
"token": "人民",
"start_offset": 2,
"end_offset": 4,
"type": "CN_WORD",
"position": 5
},
{
"token": "共和国",
"start_offset": 4,
"end_offset": 7,
"type": "CN_WORD",
"position": 6
},
{
"token": "共和",
"start_offset": 4,
"end_offset": 6,
"type": "CN_WORD",
"position": 7
},
{
"token": "国",
"start_offset": 6,
"end_offset": 7,
"type": "CN_CHAR",
"position": 8
},
{
"token": "国歌",
"start_offset": 7,
"end_offset": 9,
"type": "CN_WORD",
"position": 9
}
]
效果还是很满意的
5.Spring Data Elasticsearch中使用ik中文分词器
在字段上加上@Field
并配置参数analyzer或searchAnalyzer为ik分词器
@Document(indexName = "idx_persons",type = "person")
public class Person {
@Id
private String id;
@Field(analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
private String username;
// getters && setters
}