Docker单点部署[8.11.3] Elasticsearch + Kibana + ik分词器 + pinyin分词器
这里记录一次成功简单登陆Kibana
的实际经验。
一、Elasticsearch
运行Elasticsearch
容器
1 | docker run -d \ |
重置elastic
密码,记住这段密码
1 | docker exec -it es /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic |
重置kibana_system
密码,记住这段密码
1 | docker exec -it es /usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system |
二、Kibana
运行Kibana
容器,账户密码填kibana_system
的
1 | docker run -d \ |
三、访问
访问http://localhost:5601
用elastic
的账号密码登录。
四、其他
关于一些报错
kibana
容器创建时不允许用elastic
用户连接elasticsearch
- 运行
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
报错SSL
错误 - 等等各种因为使用了不是
8.11.3
版本的安全验证方法遇到的错误
这里是官方的install with docker
教程,也是一坨shit。
https://www.elastic.co/guide/en/kibana/current/docker.html
这里是官方关于安全配置的docs,遇到什么问题就多翻翻。
https://www.elastic.co/guide/en/elasticsearch/reference/master/manually-configure-security.html
或者来社区多讨论讨论。
https://discuss.elastic.co/latest
五、ik分词器
这里是官方仓库
https://github.com/medcl/elasticsearch-analysis-ik
推荐有两种安装方式
第一种:在线安装
1 | # 进入容器内部 |
如果遇到ik版本和es版本不匹配问题请看下面
第二种:离线安装
在发行版下载页面,找到和
es
版本最接近的ik
版本(博主这里是ik8.11.1 + es8.11.3)
https://github.com/medcl/elasticsearch-analysis-ik/releases在您的
your_host_es_plugins_path
目录下,创建一个名为ik
的新文件夹。将下载的
elasticsearch-analysis-ik-8.11.1.zip
文件解压到刚刚创建的ik
文件夹中修改
plugin-descriptor.properties
文件
!如无需要请跳过,可能造成无法预估的bug
1 | # 'version': plugin's version |
- 重启容器
1 | docker restart es |
安装好了之后,登录kinaba
,找到Dev Tools - Console
1 | #测试分词器 |
这里的句子分词ik_smart和ik_max_word区别不明显,可以换用”程序员”试试。
六、ik分词器的扩展和停用
1. 配置
ik分词器并不能准确识别最新的网络流行词,以及禁用敏感词。
我们可以手动配置来实现这两点。
修改IKAnalyzer.cfg.xml
文件如下
1 | <?xml version="1.0" encoding="UTF-8"?> |
这里的意思是,使用同目录下的ext.dic
作为扩展词汇;使用同目录下的stopword.dic
作为禁用词汇。这两个文件有就用,没有就新建。
最后记得重启es
容器
2. 测试
1 | #测试分词器 |
1 | { |
七、pinyin分词器
离线安装
在发行版下载页面,找到和
es
版本最接近的版本(博主这里是pinyin8.11.1 + es8.11.3)
https://github.com/medcl/elasticsearch-analysis-pinyin在您的
your_host_es_plugins_path
目录下,创建一个名为py
的新文件夹。将下载的
elasticsearch-analysis-pinyin-8.11.1.zip
文件解压到刚刚创建的py
文件夹中修改
plugin-descriptor.properties
文件
!如无需要请跳过,可能造成无法预估的bug
1 | # 'version': plugin's version |
- 重启容器
1 | docker restart es |
安装好了之后,登录kinaba
,找到Dev Tools - Console
1 | #测试分词器 |
注意事项
pinyin
分词器默认时有很多缺点,比如每个字都拆分变成拼音,不符合一般需求,并且如果使用pinyin
分词器,默认的中文索引就没了,只剩下pinyin
索引了。所以,需要完善以下几点:
- 分词时不仅包含汉字,还需包含拼音
- 分词时按词分,不是字
- 使用汉字查询时,不会查询到同音词条目docs
为了做到这几点,需要在创建索引库时构建一个自定义分词器,如下
1 | PUT /test |
我们自定义了三步之中的tokenizer
和filter
,前者用ik
分词,后者用pinyin
分词,同时自定义了pinyin
分词器的一些设置,分词时同时保留汉字和拼音,具体设置看pinyin
分词器的github
官网。同时设定了存入数据时使用分词器my_analyzer
,搜索时,使用分词器ik_smart
。
存入两个数据,如下
1 | POST /test/_doc/1 |
那么现在,索引库的具体内容如下所示
因为搜索时使用的是ik_smart
分词器,不是自定义分词器,所以这里已经解决了同音词的问题。