Elasticsearch自带的分词器对中文支持不好,所以需要安装ik分词器。如果直接用docker部署并运行,可以把分词器的目录挂载出来,然后把下载好的分词器放到对应目录即可,或者不挂载目录,直接把分词器复制到容器内也可以。
使用KubeSphere进行部署的话,不直接访问宿主机的情况下,没法往容器中复制文件,况且通常kubernetes都是集群部署,复制文件操作不便,服务迁移时也会造成额外的工作量。最好的办法就是把ik分词器打包到Elasticsearch镜像中,二者融为一体。
一、构建带有IK分词器的Elasticsearch镜像
1.拉取Elasticsearch&下载ik分词器
Elasticsearch和ik分词器需要对应版本,经多次测试后,找到了版本号一致且相对较新的版本8.11.1,ES镜像拉取命令及分词器下载地址如下:
# es8.11.1镜像拉取命令
docker pull elasticsearch:8.11.1
# ik分词器下载地址
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.11.1/elasticsearch-analysis-ik-8.11.1.zip
# 拼音分词器下载地址(该处记录地址备用,下面的打包未包含该分词器)
https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v8.11.1/elasticsearch-analysis-pinyin-8.11.1.zip
2.运行Elasticsearch容器
运行容器的时候,不要挂载插件目录,因为我们要把ik分词器插件复制到容器内部再重新打包。启动命令如下:
# es容器启动命令
docker run -d \
--name es \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v es-data:/usr/share/elasticsearch/data \
--privileged \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:8.11.1
# 指定插件挂载路径参数(直接docker启动时可以加上这个参数)
-v es-plugins:/usr/share/elasticsearch/plugins
3.将ik分词器复制文件复制到Elasticsearch容器中
将下载好的ik分词器压缩包加压缩到ik文件夹下,并将整个文件夹复制到容器的“/usr/share/elasticsearch/plugins”目录下
# 1.把下载好的压缩包复制到制作镜像的linux系统中
# 2.创建ik目录
mkdir ik
# 3.把压缩包复制到ik目录下
cp elasticsearch-analysis-ik-8.11.1.zip ik/
# 4.将压缩包解压
cd ik
unzip -o elasticsearch-analysis-ik-8.11.1.zip
# 5.删除压缩包,只保留加压缩后的文件
rm -f elasticsearch-analysis-ik-8.11.1.zip
# 6.将ik文件夹复制到运行中的es容器中
# ./ik/ 写的是相对路径,改为绝对路径也可以
# 83a2c6991dd4为运行中的容器的id,可以通过 docker ps 命令查看
cd ..
docker cp ./ik/ 83a2c6991dd4:/usr/share/elasticsearch/plugins
复制压缩包及解压缩截图
删除压缩包,查看容器id,复制文件截图
在容器内部,查看插件目录截图