docker安装elasticsearch和kibana
Docker安装ElasticSearch
1 安装说明
在平时工作的时候,开发环境大多数会安装单机ElasticSearch
,但生产环境基本会安装ElasticSearch
集群版,所以我们接下来实现一下ElasticSearch
单机安装,下一节实现集群安装,但安装也大多数采用Docker
安装。不过中文搜索,会实现分词器集成,可以采用IK分词器。ElasticSearch
采用Kibana
实现数据可视化分析也是当前主流,所以我们除了安装ElasticSearch
和IK
分词器外,还需要安装Kibana
。
1:ElasticSearch单机安装
2:IK分词器安装
3:Kibana安装
2 Docker安装ElasticSearch
当前ElasticSearch
已经到了8.0
,新版本都有很多新特性,性能和功能都有大幅提升,我们建议使用较高版本,这里将采用7.12.1
版本。
2.1 网络创建
高版本安装Kibana
的时候需要和ElasticSearch
在同一网段内,所以采用docker
安装首先要确认网段,为了方便操作,我们直接创建一个网络,创建脚本如下:
docker network create itmentu-net
2.2 ElasticSearch安装
安装ElasticSearch
脚本如下:
docker run -d \ --name elasticsearch \ -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \ -e "discovery.type=single-node" \ -v es-data:/usr/share/elasticsearch/data \ -v es-plugins:/usr/share/elasticsearch/plugins \ --privileged \ --network itmentu-net \ -p 9200:9200 \ -p 9300:9300 \ elasticsearch:7.12.1
命令说明:
-e "cluster.name=es-docker-cluster"
:设置集群名称-e "http.host=0.0.0.0"
:监听的地址,可以外网访问-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
:内存大小-e "discovery.type=single-node"
:非集群模式-v es-data:/usr/share/elasticsearch/data
:挂载逻辑卷,绑定elasticsearch
的数据目录-v es-logs:/usr/share/elasticsearch/logs
:挂载逻辑卷,绑定elasticsearch
的日志目录-v es-plugins:/usr/share/elasticsearch/plugins
:挂载逻辑卷,绑定elasticsearch
的插件目录--privileged
:授予逻辑卷访问权--network itmentu-net
:加入一个名为itmentu-net
的网络中-p 9200:9200
:端口映射配置
Docker
安装ElasticSearch
下载可能会比较慢,需要耐心等待.
安装完成后,在浏览器中输入:http://localhost:9200/ 即可看到elasticsearch
的响应结果:
3 安装Kibana
我们可以基于Http
请求操作ElasticSearch
,但基于Http
操作比较麻烦,我们可以采用Kibana
实现可视化操作。
3.1 Kibana介绍
Kibana
是一个免费且开放的用户界面,能够让您对 Elasticsearch
数据进行可视化,并让您在 Elastic Stack
中进行导航。您可以进行各种操作,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。
Kibana
让您能够自由地选择如何呈现自己的数据。不过借助 Kibana
的交互式可视化,您可以先从一个问题出发,看看能够从中发现些什么。
可视化界面如下:
3.2 Kibana安装
使用Docker
安装Kibana
非常简单,只需要执行如下命令即可,但是执行命令需要注意Kibana
操作的ElasticSearch
地址,因为Kibana
是需要连接ElasticSearch
进行操作的,命令如下:
docker run -d \ --name kibana \ -e ELASTICSEARCH_HOSTS=http://192.168.1.10:9200 \ --network itmentu-net \ -p 5601:5601 \ kibana:7.12.1
命令说明:
--network itmentu-net
:加入一个名为itmentu-net
的网络中,与elasticsearch
在同一个网络中-e ELASTICSEARCH_HOSTS=http://192.168.1.10:9200"
:设置elasticsearch
的地址,因为kibana
已经与elasticsearch
在一个网络,因此可以用容器名直接访问elasticsearch
,也可以写IP地址实现访问。-p 5601:5601
:端口映射配置
kibana
安装会比较耗时间,也需要耐心等待下载安装完成,如果想实时知道服务安装运行的状态,可以通过查看日志实现,查看日志如下:docker logs -f kibana
访问http://192.168.1.10:5601
效果如下:
3.3 Kibana中文配置
刚开始Kibana
是英文面板,看起来不是很方便,但Kibana
是支持中文配置,所以我们可以把Kibana
配置成中文版,便于我们操作。
切换中文操作如下:
#进入容器 docker exec -it kibana /bin/bash #进入配置文件目录 cd /usr/share/kibana/config #编辑文件kibana.yml vi kibana.yml #在最后一行添加如下配置 i18n.locale: zh-CN #保存退出 exit #并重启容器 docker restart kibana
4 IK分词器安装
我们打开Kibana
,点击开发工具,操作如下:
我们在使用ElasticSearch
的时候,默认用standard
分词器,但standard
分词器使用的是按空格分词,这种分词操作方法不符合中文分词标准,我们需要额外安装中文分词器。
4.1 IK分词器介绍
IK Analyzer
是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer
已经推出了多个大版本。最初,它是以开源项目Luence
为应用主体的,结合词典分词和文法分析算法的中文分词组件。IK Analyzer
则发展为面向Java
的公用分词组件,独立于Lucen
e项目,同时提供了对Lucene
的默认优化实现。
ElasticSearch
内核其实就是基于Lucene
,所以我们可以直接在ElasticSearch
中集成IK分词器,IK
分词器集成ElasticSearch
下载地址:github.com/medcl/elast…4.2 IK分词器配置
下载安装包elasticsearch-analysis-ik-7.12.1.zip
后,并解压
我们只需要将上面elasticsearch-analysis-ik-7.12.1
拷贝到ElasticSearch
的plugins
目录中即可,但由于当前服务采用的是docker
安装,所以需要将文件拷贝到docker
容器的plugins
目录才行。
#为了方便配置,我们将elasticsearch-analysis-ik-7.12.1改成ik文件夹 mv elasticsearch-analysis-ik-7.12.1 ik #将ik文件夹拷贝到elasticsearch容器中 docker cp ik elasticsearch:/usr/share/elasticsearch/plugins #重启容器 docker restart elasticsearch
4.3 分词测试
IK
分词器包含两种模式:
-
ik_smart
:最少切分 -
ik_max_word
:最细切分
前面使用默认的standard
分词器,对中文分词非常难用,安装IK分词器后,我们可以使用IK分词器测试,测试代码如下:
GET /_analyze { "analyzer": "ik_max_word", "text": "IT门徒,带你打开通往梦想的门!" }
测试效果如下:
梦想的门
我们希望它是一个词,而带你
我们希望它不被识别一个词,又该如何实现呢?4.4 IK自定义词典
IK分词器支持自定义词典,包括自定义分词,也包含自定义停用分词,操作起来也非常简单。我们接下来实现一下自定义词典和停用词典。
4.4.1 自定义词典
自定义词典,需要先创建自己的词典,再引用自己的词典即可。
1:创建词典
2:引用词典
1)创建词典
在config
中创建自己的词典,例如叫itmentu_ext.dic
,在文件中添加自定义的词语,操作如下:
打开elasticsearch的映射卷位置,我们安装IK分词器时的目录
cd /var/lib/docker/volumes/es-plugins/_data/ik/config/
在此目录下创建任意文件,需要以dic结尾比如 itmentu_ext.dic
编辑里面的内容
我们把自定义的词典梦想的门
添加到了itmentu_ext.dic
中了,这就是创建词典,如果后多个自定义次,需要换行加入,这里一定要注意中文分词设置编码格式为UTF-8
。
2)引用词典
修改config/IKAnalyzer.cfg.xml
引用自己创建的itmentu_ext.dic
词典,配置如下:
上图代码如下:
<?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">itmentu_ext.dic</entry> <!--用户可以在这里配置自己的扩展停止词字典--> <entry key="ext_stopwords"></entry> <!--用户可以在这里配置远程扩展字典 --> <!-- <entry key="remote_ext_dict">words_location</entry> --> <!--用户可以在这里配置远程扩展停止词字典--> <!-- <entry key="remote_ext_stopwords">words_location</entry> --> </properties>
我们将改好的文件重新上传到elasticsearch
容器的/usr/share/elasticsearch/plugins
目录下,重启elasticsearch
容器即可。
操作如下:
#将上传的config拷贝到服务器 #将ik文件夹拷贝到elasticsearch容器中 docker cp ik elasticsearch:/usr/share/elasticsearch/plugins #重启容器 docker restart elasticsearch
在使用Kibana
测试 http://192.168.211.130:5601/app/dev_tools#/console
效果如下:
额,自定义分词字典失败,尝试了多种办法,仍是没办法识别,且es日志有报错,没搞明白。