架构师修炼之道

知识日新月异,唯有保持同步迭代,才能适应变化的未来!

0%

在elasticsearch8.3中安装elasticsearch-analysis-ik中文分词插件

安装

手动下载

  • 在官方发布页面下载安装包 elasticsearch-analysis-ik-[版本].zip,其版本与你安装的ES要相同。
  • 执行命令 ~/elasticsearch-8.3.3/plugins/analysis-ik 创建ik插件存储目录,将上面的文件解压后放到analysis-ik目录内:
1
2
3
4
5
6
7
8
9
10
11
12
tianmx@mydebian:[~/elasticsearch-8.3.3/plugins/analysis-ik]: ll
总用量 1.5M
drwxr-xr-x 3 tianmx tianmx 4.0K 8月 28 23:09 ./
drwxr-xr-x 5 tianmx tianmx 4.0K 8月 28 23:08 ../
-rw-r--r-- 1 tianmx tianmx 258K 9月 29 2020 commons-codec-1.9.jar
-rw-r--r-- 1 tianmx tianmx 61K 9月 13 2020 commons-logging-1.2.jar
drwxr-xr-x 2 tianmx tianmx 4.0K 8月 28 17:05 config/
-rw-r--r-- 1 tianmx tianmx 54K 8月 28 22:56 elasticsearch-analysis-ik-8.3.3.jar
-rw-r--r-- 1 tianmx tianmx 720K 9月 29 2020 httpclient-4.5.2.jar
-rw-r--r-- 1 tianmx tianmx 320K 9月 29 2020 httpcore-4.4.4.jar
-rw-r--r-- 1 tianmx tianmx 1.8K 8月 28 22:56 plugin-descriptor.properties
-rw-r--r-- 1 tianmx tianmx 125 8月 28 22:56 plugin-security.policy

远程安装

  • 使用 elasticsearch-plugin 安装(从 v5.5.1 版本开始支持)
  • 执行命令 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/[版本]/elasticsearch-analysis-ik-[版本].zip 将自动下载并解压到插件目录。
  • 下载插件的地址需从IK官方Github发布页面上复制,注意版本号与你安装的ES一致。

手动编译

一般来说官方会适时发布与新版本相匹配包,但有时也并不会那么及时,在写本篇文章时并没有8.3.3的版本。另外如果你想对源码作一些改造调整的话,还是自己编译最方便。

  • 编译环境
    • IntelliJ IDEA 2022.2.1(非必需,你可以用文本编辑器)
    • Apache Maven 3.8.1
    • OpenJDK 17
  • 从Github上下载最新源码,这里我们取master分支的代码。
  • 需要对源码进行如下调整才能顺利编译:
    1. 打开 pom.xml 文件将 <elasticsearch.version>7.16.0</elasticsearch.version> 修改为 <elasticsearch.version>8.3.3</elasticsearch.version>
    2. 将文中 <maven.compiler.target>1.8</maven.compiler.target> 修改为 <maven.compiler.target>17</maven.compiler.target>
    3. 将文中 maven-javadoc-plugin 插件配置整个删除掉。
    4. 打开 IkAnalyzerProvider.java 类修复构造方法报错问题,也就是将 super(indexSettings, name, settings); 改为 super(name, settings); 即可。
  • 在IDEA的Maven窗口中找到Profiles节点,然后选中release,点击左上角刷新按钮,如果想跳过单元测试可点击 Skip Tests 按钮。按住Ctrl键并用鼠标依次单击选中clean和package,最后单击工具类绿色播放按钮。
  • (可选项)如果你想通过命令行执行maven进行编译,可以执行 mvn -DskipTests=true clean package -P release
  • 如果一切顺利你应该能够在编译目录 target/releases/elasticsearch-analysis-ik-8.3.3.zip 中看到打好的zip包。
  • 接下来按上面介绍的手动下载章节来完成安装工作。

测试

注意:插件安装完后要重启ES。

  • 重启ES后执行如下命令查看插件是否安装成功
1
2
3
4
tianmx@mydebian:[~/elasticsearch-8.3.3]: ./bin/elasticsearch-plugin list
analysis-icu
analysis-ik
analysis-smartcn
  • 如果你已经安装好了Kibana,那么可以进入 http://192.168.0.110:5601/app/dev_tools#/console 页面来测试一下,随便找个索引就可以发送请求测试。
  • ik_smart分词器: 会做最粗粒度的拆分,适合 Phrase 查询。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
GET metrics-endpoint.metadata_current_default/_analyze
{
"text": "中华人民共和国MN",
"tokenizer": "ik_smart"
}

{
"tokens": [
{
"token": "中华人民共和国",
"start_offset": 0,
"end_offset": 7,
"type": "CN_WORD",
"position": 0
},
{
"token": "mn",
"start_offset": 7,
"end_offset": 9,
"type": "ENGLISH",
"position": 1
}
]
}
  • ik_max_word分词器: 会将文本做最细粒度的拆分,会穷尽各种可能的组合,适合 Term Query。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
GET metrics-endpoint.metadata_current_default/_analyze
{
"text": "中华人民共和国MN",
"tokenizer": "ik_max_word"
}

{
"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": "mn",
"start_offset": 7,
"end_offset": 9,
"type": "ENGLISH",
"position": 9
}
]
}
  • 我们前面有安装过analysis-smartcn,如果想测试它只需要将 tokenizer 的值改为 smartcn_tokenizer 即可。
  • IK官方有提供一份测试说明,跟着操作一遍也能验证IK安装是否成功。