- Linux docker部署Elasticsearch服务以及ik插件并实现ik_smart最粗力度分词
- 需求
- 下载并部署Elasticsearch(docker容器部署)
- 下载并部署Elasticsearch-ik插件
- 更新word索引,采用最粗分词方式
- 参考文章
项目的缘故,需要实现对上传文档进行文字检索,采用了Elasticsearch(以下简称为es)第三方服务,具体需求是对词汇进行搜索,但es默认的分词器分词方式是最小力度划分,例如 检索“中华人民共和国”,检索时会划分为 “中”、“国”,“人”、“民”、“共”、“和”、“国”,然后对文档进行搜索匹配,这时比如“大国中间的”中的“中”也会匹配到,这时需要引入ik插件,采用 ik提供的ik_smart分词,检索时将检索语句划分为词语,例如“中华人民共和国”,可能会划分为“中国”、“人民”、“共和国”,以词语进行划分。
下载并部署Elasticsearch(docker容器部署)1. 拉取Elasticsearch镜像
镜像仓库 https://hub.docker.com/
这个外网可以访问,如果是内网的话看你内网的镜像仓库地址
($操作表示均在Linux服务器输入框中操作)
#拉取镜像文件 $ docker pull elasticsearch #说明:此处也可在Tags中选择指定版本的elasticsearch #说明:拉取镜像文件需要镜像仓库地址,如下 $ docker pull reg:****.com/basicimage/elasticsearch:7.16.2
2. 查看镜像
$ docker images
3. 创建Elasticsearch容器
#1、创建Elasticsearch配置文件夹 $ mkdir -p /usr/local/data-docker/elasticsearch/config #2、创建Elasticsearch数据文件夹 $ mkdir -p /usr/local/data-docker/elasticsearch/data #3、创建Elasticsearch插件文件夹(如:ik) $ mkdir -p /usr/local/data-docker/elasticsearch/plugins #说明:目的将CentOS本地的文件夹映射到Elasticsearch容器,以实现容器数据的持久化到CentOS本地,以及通过CentOS本地文件夹内容的修改同步到容器 $ echo "http.host: 0.0.0.0">>/usr/local/data-docker/elasticsearch/config/elasticsearch.yml #创建并写入elasticsearch.yml配置,注意:http.host: 0.0.0.0 冒号后有一空格
4. 文件夹赋权
$ chmod -R 777 elasticsearch/ # 需要对 elasticsearch 下属的所有文件进行赋权,负责可能导致镜像运行时报没有访问权限错误
5. 创建宿主机Elasticsearch文件
宿主机也需要有es的文件,与docker容器内的es对应,es的yml配置文件会采用宿主机的配置文件
elasticsearch:7.16.2安装包下载地址:
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.2-linux-x86_64.tar.gz
# 创建文件夹 $ mkdir -p /usr/share/elasticsearch # 上传对应镜像对应版本elasticsearch安装包,注意要和镜像版本相同,可以通过$ docker images 查看版本 # elasticsearch:7.16.2安装包下载地址: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.2-linux-x86_64.tar.gz # 上传安装包 $ rz # 解压到/usr/share/elasticsearch路径下 $ tar -xzf elasticsearch-7.16.2-linux-x86_64.tar.gz # 将解压好的elasticsearch-7.16.2文件夹移到/usr/share/路径下,移除原有elasticsearch文件夹 $ mv elasticsearch-7.16.2 /usr/share/ # 将elasticsearch-7.16.2文件夹改名为elasticsearch $ rm -rf elasticsearch $ mv elasticsearch-7.16.2 elasticsearch
6. 命令启动镜像文件
$ docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx128m" -v /usr/local/data-docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/data-docker/elasticsearch/data:/usr/share/elasticsearch/data -v /usr/local/data-docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins -d elasticsearch
参数说明
--name elasticsearch:将Elasticsearch容器命名为 elasticsearch -p 9200:9200:将容器的9200端口映射到宿主机9200端口 -p 9300:9300:将容器的9300端口映射到宿主机9300端口,目的是集群互相通信 -e "discovery.type=single-node":单例模式 -e ES_JAVA_OPTS="-Xms64m -Xmx128m":配置内存大小 -v /usr/local/data-docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:将配置文件挂载到宿主机 -v /usr/local/data-docker/elasticsearch/data:/usr/share/elasticsearch/data:将数据文件夹挂载到宿主机 -v /usr/local/data-docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins:将插件目录挂载到宿主机(需重启) -d elasticsearch:后台运行容器,并返回容器ID
7. 验证是否成功
#说明:安装完后,通过如下指令查看elasticsearch是否安装成功 curl http://localhost:9200
展示结果如下:
{
"name" : "550eca5cf3b2",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "1mP9IJU3TUy_C2DZMfKGBg",
"version" : {
"number" : "7.16.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "81a1e9eda8e6183f5237786246f6dced26a10eaf",
"build_date" : "2020-05-12T02:01:37.602180Z",
"build_snapshot" : false,
"lucene_version" : "8.5.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
注意:如展示上边内容,说明docker安装elasticsearch成功,如远程访问无法展示上述内容,请关防火墙或防火墙开放9200、9300端口
8. Docker启动容器自启
docker update elasticsearch --restart=always下载并部署Elasticsearch-ik插件
1. 下载地址
https://github.com/medcl/elasticsearch-analysis-ik/releases
点击对应版本,如下图,版本要和elasticsearch的版本一样,版本号可以通过$ docker images 查看
点击tar包下载
2. 上传到容器中并解压安装包
#先将下载好的tar包上传到/usr/ $ cd /usr/ $ rz #将压缩包移动到容器中 $ docker cp /usr/elasticsearch-analysis-ik-7.16.2.zip elasticsearch:/usr/share/elasticsearch/plugins #进入容器 $ docker exec -it elasticsearch /bin/bash #创建目录 $ mkdir /usr/share/elasticsearch/plugins/ik #将文件压缩包移动到ik中 $ mv /usr/share/elasticsearch/plugins/elasticsearch-analysis-ik-7.16.2.zip /usr/share/elasticsearch/plugins/ik #进入目录 $ cd /usr/share/elasticsearch/plugins/ik #解压 $ unzip elasticsearch-analysis-ik-7.16.2.zip #删除压缩包 $ rm -rf elasticsearch-analysis-ik-7.16.2.zip
- 重启docker中的es容器,重启项目
# ik插件放置到容器中的plugins后,重启es容器 # 查看所有docker容器 $ docker ps # 重启es容器 $ docker restart elasticsearch(或者容器ID)
- 查看ik插件是否安装成功
# 方法一: 查看logs日志,看日志中是否包含 loaded plugin [analyzesis-ik] $ docker logs elasticsearch # 方法二:进入容器中,通过 bin 中的elasticsearch-plugin list命令查看是否安装ik $ docker exec -it elasticsearch /bin/bash $ cd bin $ elasticsearch-plugin list # 会显示ik,结果如下更新word索引,采用最粗分词方式
安装好ik插件后,还不能在实际使用中体现,需要更新es的索引采用ik_smart的分词方式
# 查看es的所有索引
$ curl 'localhost:9200/_mapping?retty=true'
# 删除所有的索引,以下提供删除word索引的方法
$ curl -X DELETE 'localhost:9200/word'
# 新建word索引,PUT用于新建索引,-H 'content-Type:application/json' 将以下文本格式申明为json格式
$ curl -X PUT 'localhost:9200/word' -H 'content-Type:application/json' -d '
{
"mappings": {
"properties": {
"user": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart"
},
"title": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart"
},
"content": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart"
},
"id": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart"
},
"desc": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart"
}
}
}
}'
重启docker中的es容器,重启项目
# ik插件放置到容器中的plugins后,重启es容器 # 查看所有docker容器 $ docker ps # 重启es容器 $ docker restart elasticsearch(或者容器ID)
测试效果
Elasticsearch 安装
https://www.cnblogs.com/nesn/p/15898123.html
Elasticsearch-analysis-ik 安装
https://blog.csdn.net/qq_40942490/article/details/111594267
创建ik_smart分词索引
http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html



