docker安装elasticsearch
安装ES
##依次执行如下命令
#安装elasticsearch7.12.0,如果不指定版本号则默认安装最新版本
sudo docker pull elasticsearch:7.12.0
#安装对应版本的kibana
#kibana是es的可视化界面
sudo docker pull kibana:7.12.0
#查看所有正在运行的docker容器,检查elasticsearch和kibana是否安装成功
sudo docker ps
#在主机创建es的配置文件
mkdir -p /mydata/elasticsearch/config
#在主机上创建es的数据文件
mkdir -p /mydata/elasticsearch/data
#配置es可以被远程的任何机器访问 --可根据实际业务需求进行设定
echo "http.host: 0.0.0.0">>/mydata/elasticsearch/config/elasticsearch.yml
##配置docker中的es,命令依次的含义如下:
#1.--name表示重命名 9200端口是es接收请求暴露的端口 9300是es在分布式集群下节点间通信的端口
#2.指定现在已单节点模式运行
#3.指定es的初始和最大的占用内存 --此处根据业务实际情况设定,此处最大内存设置过小可能导致es启动失败
#4.配置文件挂载 挂载后在docker外面修改相应的文件,与之挂载的docker内部文件会相应修改
#5.数据文件挂载
#6.插件挂载
#7.后台启动
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx1024m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.12.0
#然后将本机关于es的文件权限改为777
chmod -R 777 /mydata/elasticsearch
##设置开机自启动
docker update elasticsearch --restart=always
docker update kibana --restart=always
测试
访问主机地址加9200端口即可验证是否安装成功,成功返回数据如下
{
"name" : "658a9cab8bd9",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "JvncwlDnR66lGj97fNwlRg",
"version" : {
"number" : "7.12.0",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "78722783c38caa25a70982b5b042074cde5d3b3a",
"build_date" : "2021-03-18T06:17:15.410153305Z",
"build_snapshot" : false,
"lucene_version" : "8.8.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
运行kibana
#此处http://192.168.56.10:9200为es的IP地址
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.10:9200 -p 5601:5601 \
-d kibana:7.12.0
测试:浏览器访问http://192.168.56.10:5601/即可进入es可视化页面。
安装ik分词器
-
ik分词器的下载地址为:https://github.com/medcl/elasticsearch-analysis-ik/releases
-
选择相对应的版本下载
-
解压到/mydata/elasticsearch/plugins目录下即可安装成功
-
测试:重启es后在kibana的Dev Tools下输入使用post请求:
POST _analyze { "analyzer": "ik_max_word", "text": "我是干饭人" } //返回的结果如下: { "tokens" : [ { "token" : "我", "start_offset" : 0, "end_offset" : 1, "type" : "CN_CHAR", "position" : 0 }, { "token" : "是", "start_offset" : 1, "end_offset" : 2, "type" : "CN_CHAR", "position" : 1 }, { "token" : "干饭", "start_offset" : 2, "end_offset" : 4, "type" : "CN_WORD", "position" : 2 }, { "token" : "人", "start_offset" : 4, "end_offset" : 5, "type" : "CN_CHAR", "position" : 3 } ] }
注意:安装ik分词器会占用大量的内存空间,因此上面设置的ES占用的最大内存空间一定要设置的足够大,否则会导致重启失败。
自定义分词
对于一些自定义的词汇ik无法识别,可以通过编写扩展词库达到分词的目的,如上面的“干饭人”就无法分词,下面我们采用nginx返回扩展词库的方式配置扩展词。
安装nginx
##1.随便启动一个nginx实例,只是为了复制出配置
docker run -p 80:80 --name nginx -d nginx:1.10
##2.将容器内的配置文件拷贝到当前目录 注意后面的点
docker container cp nginx:/etc/nginx .
##3.修改文件名称
cp nginx conf
##4.把这个conf移动到/mydata/nginx下
mv conf /mydata/nginx
##5.终止原容器并伤处
docker stop nginx
docker rm nginx
##6.创建新的nginx,执行以下命令
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10
编写扩展词库
##在nginx下的html中新建es文件夹,并新建fenci.txt扩展词库
cd /mydata/nginx/html
mkdir es
vi fenci.txt ##写入分词:干饭人
ik配置该分词
##进入ik的配置文件
cd /mydata/elasticsearch/plugins/ik/config
vi 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"></entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!--修改此处-->
<entry key="remote_ext_dict">http://192.168.56.10/es/fenci.txt</entry>
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
重启ES测试“我是干饭人”结果如下
{
"tokens" : [
{
"token" : "我",
"start_offset" : 0,
"end_offset" : 1,
"type" : "CN_CHAR",
"position" : 0
},
{
"token" : "是",
"start_offset" : 1,
"end_offset" : 2,
"type" : "CN_CHAR",
"position" : 1
},
{
"token" : "干饭人",
"start_offset" : 2,
"end_offset" : 5,
"type" : "CN_WORD",
"position" : 2
},
{
"token" : "干饭",
"start_offset" : 2,
"end_offset" : 4,
"type" : "CN_WORD",
"position" : 3
},
{
"token" : "人",
"start_offset" : 4,
"end_offset" : 5,
"type" : "CN_CHAR",
"position" : 4
}
]
}