docker 配置 elasticsearch、ik分词器

## 创建一个 network 方便其他服务连接,比如 Kibana
# docker network create elasticSearchNetwork

# docker run -d --name elasticsearch --net elasticSearchNetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.7.0

## 将本地配置文件映射到容器,方便日后修改配置
# mkdir ~/Desktop/elasticsearch

# docker cp 容器ID:/usr/share/elasticsearch/config ~/Desktop/elasticsearch
# docker cp 容器ID:/usr/share/elasticsearch/data ~/Desktop/elasticsearch
# docker cp 容器ID:/usr/share/elasticsearch/logs ~/Desktop/elasticsearch

## 关闭容器后重启即可,config、data、logs 都在宿主机,方便查看和修改配置
## 比如常用的 ik 分词器,下载对应版本,然后放在 plugins/ik 目录下即可使用
docker run -d --name elasticsearch --net elasticSearchNetwork \
-e "TZ=Asia/Shanghai" \
-v ~/Desktop/elasticsearch/config:/usr/share/elasticsearch/config \
-v ~/Desktop/elasticsearch/data:/usr/share/elasticsearch/data \
-v ~/Desktop/elasticsearch/logs:/usr/share/elasticsearch/logs \
-v ~/Desktop/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.7.0

## http://localhost:9200

附录:
使用 Kibana 连接 elasticsearch

## 注意这里的 network 要使用刚刚 elasticsearch 创建的网络
## kibana 的版本也要和 elasticsearch 一致,防止出现奇怪的问题
# docker run -d --name kibana --net elasticSearchNetwork -p 5601:5601 kibana:7.7.0

## 同样的,将 docker 中的配置文件拷贝到宿主机,方便配置
# ~/Desktop/kibana
# docker cp 090b7ba075fdffaffa636f61df9b188f624a94abc127573c23af5451e3d7de76:/usr/share/kibana/config ~/Desktop/kibana

## 修改配置文件 kibana.yml 添加一行,配置 Kibana 为中文
i18n.locale: "zh-CN"

## 关闭容器后重启即可
docker run -d --name kibana --net elasticSearchNetwork \
-v ~/Desktop/kibana/config:/usr/share/kibana/config \
-p 5601:5601 kibana:7.7.0

## http://localhost:5601

配置 ik 分词器自定义词典

在 ik 分词器的 config/IKAnalyzer.cfg.xml 文件中可以指定远程扩展字典

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>IK Analyzer 扩展配置</comment>
	<!--用户可以在这里配置自己的扩展字典 -->
	<entry key="ext_dict">custom/mydict.dic;custom/single_word_low_freq.dic</entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords">custom/ext_stopword.dic</entry>
 	<!--用户可以在这里配置远程扩展字典 -->
	<entry key="remote_ext_dict">location</entry>
 	<!--用户可以在这里配置远程扩展停止词字典-->
	<entry key="remote_ext_stopwords">http://xxx.com/xxx.dic</entry>
</properties>

其中 location 是指一个 url,比如 http://yoursite.com/customDict.txt,该请求只需满足以下两点即可完成分词热更新。
1.该 http 请求需要返回两个头部(header),一个是 Last-Modified,一个是 ETag,这两者都是字符串类型,只要有一个发生变化,该插件就会去抓取新的分词进而更新词库。
2.该 http 请求返回的内容格式是一行一个分词,换行符用 \n 即可。

可以将需自动更新的热词放在一个 UTF-8 编码的 .txt 文件里,放在 nginx 下,只要更新这个 txt 文档,ik 分词器就会读取新的分词规则,从而做到不停止 es 从而在线更新分词规则。

posted @ 2020-05-19 21:44  LiuChengloong  阅读(755)  评论(0编辑  收藏  举报