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分词器,不是自定义分词器,所以这里已经解决了同音词的问题。



