最近刚研究ES,就记录一下基本环境的配置,有时间再搭建一套集群环境,这里用到的版本统一为6.8.2,现在网上es7+了,因为是学习使用不必追求最新的版本,学习资料更新要慢一些,新特性用不到,从简单入手,当然也不想太古老,综合各方考虑就挑了这个版本的。
先将镜像pull下来,所有用的的镜像,如下:
docker pull docker.elastic.co/elasticsearch/elasticsearch:6.8.2
docker pull docker.elastic.co/kibana/kibana:6.8.2
# 网上这个镜像算最新了,不过也有几年了
docker pull mobz/elasticsearch-head:5
还需要下载个中文分词器
中文分词器需要去这里下载,分词器的版本要跟es版本一致,我这里的版本是6.8.2,所有直接下载
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.2/elasticsearch-analysis-ik-6.8.2.zip
docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.8.2
注意,用参数discovery.type
指定是单节点的single-node
查看是否成功,直接在浏览器上输入:http://127.0.0.1:9200,返回大致如下:
{
"name" : "fcz78No",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "wMHbP81pQIWTt31z6W3jNA",
"version" : {
"number" : "6.8.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "b506955",
"build_date" : "2019-07-24T15:24:41.545295Z",
"build_snapshot" : false,
"lucene_version" : "7.7.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
进入es容器,在elasticsearch.yml
中添加下面的后两行配置
docker exec -it es /bin/bash
vi ./config/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
然后重启一下容器
docker restart es
docker run -d --name kibana -e ELASTICSEARCH_URL=http://10.50.200.169:9200 -p 5601:5601 docker.elastic.co/kibana/kibana:6.8.2
注意,网上各种情况不一,有的用ELASTICSEARCH_URL
指定ip地址,有的用 --link
指定链接容器,并且还有人用ELASTICSEARCH_URL
指定的ip地址必须是容器内部的ip地址,我只里就是如上配置的,并且是成功的,其他情况没有一一验证,另外得说一下,我的服务器ip就是10.50.200.169
;
安装完成后,访问http://10.50.200.169:5601
,出现如下界面表示成功
之前已经准备好了分词器elasticsearch-analysis-ik-6.8.2.zip
,将其移入到es容器内的plugins目录下,然后创建一个ik
文件夹,将zip放入,并解压即可。操作如下
docker exec -it es /bin/bash
[root@32ff976c85e5 elasticsearch]# ls
LICENSE.txt NOTICE.txt README.textile bin config data lib logs modules plugins
[root@32ff976c85e5 elasticsearch]# cd plugins/
[root@32ff976c85e5 plugins]# mkdir ik
[root@32ff976c85e5 plugins]# cd ik
[root@32ff976c85e5 ik]# unzip elasticsearch-analysis-ik-6.8.2.zip
[root@32ff976c85e5 ik]# ll
total 5832
-rw-r--r-- 1 root root 263965 May 6 2018 commons-codec-1.9.jar
-rw-r--r-- 1 root root 61829 May 6 2018 commons-logging-1.2.jar
drwxr-xr-x 2 root root 4096 Dec 25 20:20 config
-rw-r--r-- 1 root root 54738 Jan 17 21:47 elasticsearch-analysis-ik-6.8.2.jar
-rw-r--r-- 1 root root 4504673 Jan 17 13:47 elasticsearch-analysis-ik-6.8.2.zip
-rw-r--r-- 1 root root 736658 May 6 2018 httpclient-4.5.2.jar
-rw-r--r-- 1 root root 326724 May 6 2018 httpcore-4.4.4.jar
-rw-r--r-- 1 root root 1805 Jan 17 21:47 plugin-descriptor.properties
-rw-r--r-- 1 root root 125 Jan 17 21:47 plugin-security.policy
插件完成后,需要重启一下es容器。
然后转入kibana管理界面中找到Dev Tools菜单,在Console中输入测试,并正常返回如下
docker run --name es-manager -d -p 9100:9100 mobz/elasticsearch-head:5
运行后,在浏览器输入:http://10.50.200.169:9100,查看
表示成功!
可以链接一下,将 localhost修改为10.50.200.169,并“连接”,如下
在其中能看到已经有了kibana的相关索引。
提示比较明显,由于年久失修吧,eshead维护可能不到位,提示不支持application/x-www-form-urlencoded
头,那就得换一下,需要既然容器里面修改vendor.js
的提交参数。具体修改方法参考这里或者这里,我这里简要记录一下
# 首先进入容器
docker exec -it es-manager /bin/bash
# 换源(目的是为了安装vim,否则原镜像里面没有vi和vim命令,国外源也安装不上vim)
mv /etc/apt/sources.list /etc/apt/sources.list.bak
echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list
echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
apt-get update
apt-get install -y vim
# 安装完成vim后,编辑
cd _site/
vim vendor.js
:set number # 展示行号
:6886 # 跳转到6886行,修改
# 将 application/x-www-form-urlencoded 改成 application/json;charset=UTF-8
:7573 # 同理,跳转到7573行也做同样修改
保存,退出,然后重启eshead的容器即可。
通过kibana新增一个索引:
PUT junwei
{
"settings":{
"index":{
"number_of_shards":5,
"number_of_replicas":1
}
}
}
#number_of_shards 分片数量
#number_of_replicas 副本数量
点击执行后,再通过es-head查看
当然使用Kibana也可查看啦
GET junwei/_settings
GET _all/_settings
# 或者
GET _settings
GET .kibana,junwei/_settings
PUT junwei/_settings
{
"number_of_replicas":2
}
GET _all
GET junwei
指定id=1
PUT junwei/job/1
{
"title":"Docker部署单点ElasticSearch(ES)、中文分词器以及可视化插件elasticsearch-head、kibana",
"class":"article",
"publish_date":"2020-04-26",
"comments":150
}
另一种保存,不指定id,使用系统生成的id
POST junwei/job/
{
"title":"为梦想而生,为自己而活,为家人奋斗,为事业拼搏 —— 沃-兹基-硕德",
"class":"csdn",
"publish_date":"2009-03-16",
"comments":313209
}
GET junwei/job/1
# 或者
GET junwei/job/1?_source
GET junwei/job/1?_source=title
GET junwei/job/1?_source=title,class
PUT junwei/job/1
{
"comments":1500
}
注意,其他没设置的字段会被清空,如上面命令执行后如下:
只剩下评论数是1500了,其他信息全部清空了,这一点十分需要注意了,推荐更新只用下面的方法。
POST junwei/job/1/_update
{
"doc":{
"comments":2000
}
}