ES默认是没有IK中文分词器的,我们要将IK中文分词器作为一个插件安装到ES中,安装的步骤也很简单
1. 从GitHub上下载适合自己ES版本的IK中文分词器,地址如下:https://github.com/medcl/elasticsearch-analysis-ik/releases。
2. 在我们的ES的插件目录中(${ES_HOME}/plugins)创建ik目录, 将我们下载好的IK分词器解压到ik目录。
3. 重启我们所有的ES服务。 到这里,我们的IK中文分词器就安装完了。
IK中文分词器插件给我们提供了两个分析器
ik_max_word : 会将文本做最细粒度的拆分
ik_smart:会做最粗粒度的拆分
我们指定分词器为ik_max_word ,文本内容为中华人民共和国国歌:
POST _analyze
{
"analyzer": "ik_max_word",
"text": "中华人民共和国国歌"
}
我们可以看到,分词分的非常细,我们在使用上面的这些进行搜索时,都可以搜索到中华人民共和国国歌这个文本
我们再看一下另外一个分析器: ik_smart
POST _analyze
{
"analyzer": "ik_smart",
"text": "中华人民共和国国歌"
}
同样的文本,使用ik_smart进行分词时,只分成了两个词,和ik_max_word分词器比少了很多。这就是两个分词器的区别,不过这两个分析器都是可以对中文进行分词的。
创建索引时指定IK分词器
既然我们安装了IK中文分词器的插件,那么我们在创建索引时就可以为text类型的字段指定IK中文分词器了
我们创建了索引ik_index,并且为字段title指定了分词器ik_max_word
PUT ik_index
{
"mappings": {
"properties": {
"id": {
"type": "long"
},
"title": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
为索引指定默认IK分词器
PUT ik_index
{
"settings": {
"analysis": {
"analyzer": {
"default": {
"type": "ik_max_word"
}
}
}
}
}