测试环境:centos7.6elasticsearch-6.6.0

analysis-ik插件项目地址:https://github.com/medcl/elasticsearch-analysis-ik

需要注意的是es的版本和ik插件的版本必须一致。这里在使用ik6.6.0插件发现maven打包后生成target/releases下的zip文件为6.5.0版本的,可能是新版本的一个bug,我的解决办法是修改pom.xml中的elasticsearch.version参数为6.6.0,打包后的文件可正常使用。

下载安装ik插件

1、下载解压

其他版本下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

  1. cd /usr/local/src
  2. wget https://github.com/medcl/elasticsearch-analysis-ik/archive/v6.6.0.tar.gz
  3. tar -xvf v6.6.0.tar.gz
  4. cd elasticsearch-analysis-ik-6.6.0

2、源代码打包

由于下载的是源代码,需要使用maven进行打包,若报mvn不是可用命令,则需要进行安装,安装文档:http://maven.apache.org/download.cgi。 每一步显示绿色BUILD SUCCESS才表示成功。

  1. mvn clean
  2. mvn compile
  3. mvn package

3、打包成功后会在target/releases/目录下多出一个zip文件

  1. [root@localhost elasticsearch-analysis-ik-6.6.0]# cd target/releases/
  2. [root@localhost releases]# ls
  3. elasticsearch-analysis-ik-6.6.0.zip

然后在es安装目录的plugins文件下创建一个文件夹ik

  1. mkdir /usr/local/src/elasticsearch-6.6.0/plugins/ik

解压elasticsearch-analysis-ik-6.6.0.zip文件到ik目录下

  1. unzip elasticsearch-analysis-ik-6.6.0.zip -d /usr/local/src/elasticsearch-6.6.0/plugins/ik/

然后查看,插件就安装完了。注意plugins目录下除了插件的目录不能有多余文件,要不然无法启动的。

  1. [root@localhost releases]# ll /usr/local/src/elasticsearch-6.6.0/plugins/ik/
  2. 总用量 1428
  3. -rw-r--r-- 1 root root 263965 2 27 15:33 commons-codec-1.9.jar
  4. -rw-r--r-- 1 root root 61829 2 27 15:33 commons-logging-1.2.jar
  5. drwxr-xr-x 2 root root 299 11 20 21:36 config
  6. -rw-r--r-- 1 root root 54692 2 27 17:38 elasticsearch-analysis-ik-6.6.0.jar
  7. -rw-r--r-- 1 root root 736658 2 27 15:33 httpclient-4.5.2.jar
  8. -rw-r--r-- 1 root root 326724 2 27 15:33 httpcore-4.4.4.jar
  9. -rw-r--r-- 1 root root 1805 2 27 17:38 plugin-descriptor.properties
  10. -rw-r--r-- 1 root root 125 2 27 17:38 plugin-security.policy

4、启动es查看插件运行状态,如果显示有下面这条就说面插件加载成功。

  1. [elastic@localhost elasticsearch-6.6.0]$ ./bin/elasticsearch
  2. ...
  3. [INFO ][o.e.p.PluginsService ] [gP0R6oA] loaded plugin [analysis-ik]

测试ik分词效果

先看一个测试的demo,以下curl使用postman生成,当然也可以使用postman直接请求

1、请求方法

  1. curl -X POST \
  2. 'http://127.0.0.1:9200/_analyze?pretty=true' \
  3. -H 'content-type: application/json' \
  4. -d '{
  5. "analyzer": "ik_smart",
  6. "text": "中华人民共和国国歌"
  7. }'

返回结果

  1. {
  2. "tokens" : [
  3. {
  4. "token" : "中华人民共和国",
  5. "start_offset" : 0,
  6. "end_offset" : 7,
  7. "type" : "CN_WORD",
  8. "position" : 0
  9. },
  10. {
  11. "token" : "国歌",
  12. "start_offset" : 7,
  13. "end_offset" : 9,
  14. "type" : "CN_WORD",
  15. "position" : 1
  16. }
  17. ]
  18. }

2、请求方法

  1. curl -X POST \
  2. 'http://127.0.0.1:9200/_analyze?pretty=true' \
  3. -H 'content-type: application/json' \
  4. -d '{
  5. "analyzer": "ik_max_word",
  6. "text": "中华人民共和国国歌"
  7. }'

返回结果

  1. {
  2. "tokens" : [
  3. {
  4. "token" : "中华人民共和国",
  5. "start_offset" : 0,
  6. "end_offset" : 7,
  7. "type" : "CN_WORD",
  8. "position" : 0
  9. },
  10. {
  11. "token" : "中华人民",
  12. "start_offset" : 0,
  13. "end_offset" : 4,
  14. "type" : "CN_WORD",
  15. "position" : 1
  16. },
  17. {
  18. "token" : "中华",
  19. "start_offset" : 0,
  20. "end_offset" : 2,
  21. "type" : "CN_WORD",
  22. "position" : 2
  23. },
  24. {
  25. "token" : "华人",
  26. "start_offset" : 1,
  27. "end_offset" : 3,
  28. "type" : "CN_WORD",
  29. "position" : 3
  30. },
  31. {
  32. "token" : "人民共和国",
  33. "start_offset" : 2,
  34. "end_offset" : 7,
  35. "type" : "CN_WORD",
  36. "position" : 4
  37. },
  38. {
  39. "token" : "人民",
  40. "start_offset" : 2,
  41. "end_offset" : 4,
  42. "type" : "CN_WORD",
  43. "position" : 5
  44. },
  45. {
  46. "token" : "共和国",
  47. "start_offset" : 4,
  48. "end_offset" : 7,
  49. "type" : "CN_WORD",
  50. "position" : 6
  51. },
  52. {
  53. "token" : "共和",
  54. "start_offset" : 4,
  55. "end_offset" : 6,
  56. "type" : "CN_WORD",
  57. "position" : 7
  58. },
  59. {
  60. "token" : "国",
  61. "start_offset" : 6,
  62. "end_offset" : 7,
  63. "type" : "CN_CHAR",
  64. "position" : 8
  65. },
  66. {
  67. "token" : "国歌",
  68. "start_offset" : 7,
  69. "end_offset" : 9,
  70. "type" : "CN_WORD",
  71. "position" : 9
  72. }
  73. ]
  74. }

两个方法一个分的比较细,一个比较粗,看下两个的详细区别

ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;

ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。