Docker部署单点ElasticSearch(ES)、中文分词器以及可视化插件elasticsearch-head、kibana

最近刚研究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安装ES

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安装kibana

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,出现如下界面表示成功
kibana

安装中文分词器插件

之前已经准备好了分词器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中输入测试,并正常返回如下
中文分词器测试

安装elasticsearch-head

docker run --name es-manager -d -p 9100:9100 mobz/elasticsearch-head:5

运行后,在浏览器输入:http://10.50.200.169:9100,查看
elasticsearch-head
表示成功!
可以链接一下,将 localhost修改为10.50.200.169,并“连接”,如下
接入ES成功
在其中能看到已经有了kibana的相关索引。

关于ES-head查询提交等操作报406异常错误解决

406异常
提示比较明显,由于年久失修吧,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的容器即可。

ES基本操作

通过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
}

根据id查询

GET junwei/job/1
# 或者
GET junwei/job/1?_source

在这里插入图片描述

根据id只查询标题titile

GET junwei/job/1?_source=title

根据id查询title和class

GET junwei/job/1?_source=title,class

在这里插入图片描述

覆盖更新

PUT junwei/job/1
{
	"comments":1500
}

注意,其他没设置的字段会被清空,如上面命令执行后如下:
在这里插入图片描述
只剩下评论数是1500了,其他信息全部清空了,这一点十分需要注意了,推荐更新只用下面的方法。

只更新某个字段

POST junwei/job/1/_update
{
  "doc":{
    "comments":2000
  }
}

更新后,只将评论数修改为2000,其他信息都不变
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章