docker 安装的 es,并且安装了 ik 分词器docker 安装的 kibanadocker 安装的 nginx
如果以上软件未安装,可以移步以下教程:
docker 安装 nginx 代理服务器,并实简单的 html 服务器,和数据卷 docker 安装 es + kibana + ik IK 分词器配置文件
ik 分词器是默认支持远程词典和热跟新的
我们打开 分词器的配置文件,可以看到以下内容
配置文件路径:plugins/ik/config/IKAnalyzer.cfg.xml
IK Analyzer 扩展配置
从配置文件可以看出,前两项分别配置本地静态的包含词典和排除词典,但是修改这两项需要重启 es,不是很方便,不推荐使用
后两项很明显就是我们需要远程词库配置
ngxin 实现词库功能我们 nginx 配置一个静态资源目录
# 配置一个支持 HTTP 协议的服务
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/www;
index index.html;
}
}
在 www 目录下创建两个文:
包含词典:remote_ext_dict.txt
排除词典:remote_ext_stopwords.txt
分别在两个文件中写入词语,一行一个词语,格式如下
白嫖 奥利给 给力
地址栏输入地址查看是否能访问:
http://ip/remote_ext_dict.txt 如:http://192.168.200.100/remote_ext_dict.txt
http://ip/remote_ext_stopwords.txt 如:http://192.168.200.100/remote_ext_stopwords.txt
确定能访问后,将两个地址配置到 ik 分词器的配置文件,修改配置文件如下
IK Analyzer 扩展配置 http://192.168.200.100/remote_ext_dict.txt http://192.168.200.100/remote_ext_stopwords.txt
重启 es 容器
docker restart es
查看重启日志
docker logs -f es
从日志可以看出我们的远程词典已经被加载了
我们尝试在文件里面在加入一个词,实验热跟新是否生效
白嫖 奥利给 给力 嘤嘤怪
可以看到,等待不到一分钟,我们的新加入的词语 “嘤嘤怪”也被加入了
使用 kibana 客户端查看是否真的生效发送分词请求,查看是否生效
POST /_analyze
{
"analyzer": "ik_smart",
"text": "嘤嘤怪白嫖给力的教程,奥利给"
}
从下图可以看出,我们加入的词语都生效了,并且 “的” 这种无意义的词语也被排除了
扩展这里笔者使用 nginx 静态资源的方式配置,实际应用中,我们完全可以采用 web 动态项目,实现两个接口,一个返回包含词典,一个返回排除词典,每次从数据库中查询
这样我们就能实现一个界面,让用户随意的修改词典了



