ElasticSearch
官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
官方中文:https://www.elastic.co/guide/cn/elasticsearch/guide/current/foreword_id.html
社区中文: https://es.xiaoleilu.com/index.html http://doc.codingdict.com/elasticsearch/0/
概念就跳过了,需要的可以找文档看看,提取码:yyds
直接上安装教程
1、下载镜像文件
这个的版本是跟着视频来的,我自己的改成了7.6.2
docker pull elasticsearch:7.4.2 存储和检索数据 docker pull kibana:7.4.2 可视化检索数据
2、创建实例
复制的时候一定要注意双引号还有http.host:和0.0.0.0中间有一个空格,不然会启动失败。
mkdir -p /mydata/elasticsearch/config mkdir -p /mydata/elasticsearch/data echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml chmod -R 777 /mydata/elasticsearch/ 保证权限 docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS=“-Xms64m -Xmx512m” \ -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.4.2
http.host: 0.0.0.0 : es可以被远程任何机器访问 -e:配置参数 -p:暴露端口-9200是我们给es的restAPI发请求的端口-9300是es在分布式集群状态下的节点通信端口 discovery.type:单节点模式 ES_JAVA_OPTS:不指定的话es一启动会将内存全部占用,虚拟机就卡死了 -d:后台启动
查看日志:
docker logs elasticsearch
访问:
http://192.168.56.10:9200
Kibana(视频的是7.4.2,我自己的是7.6.2)
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.56.10:9200 -p 5601:5601 \ -d kibana:7.4.2
//192.168.56.10:9200这个需要改成自己的虚拟地址,我的是把虚拟地址改成跟视频的一样才用这个
访问:
http://192.168.56.10:5601
启动后效果如上
最后设置开机自启动 (update后面可以用dockers ps -a 里的id也可以的)
docker update kibana --restart=always
docker update elasticsearch --restart=always
Elasticsearch-使用入门
2. /_cat/health:查看ES健康状况
接口:get http://192.168.56.10:9200/_cat/health
3. /_cat/master:查看主节点信息
接口:get http://192.168.56.10:9200/_cat/master
4. /_cat/indicies:查看所有索引
接口:get http://192.168.56.10:9200 /_cat/indicies
创建一个索引
接口:PUT http://192.168.56.10:9200/{{index_name}}
PUT 接口具有幂等性,多次请求不会重复创建,且只支持 PUT 请求。
索引一个文档
即保存一条数据,保存在哪个索引的哪个类型下,指定用哪个唯一标识。
1. PUT 请求
接口:PUT http://192.168.56.10:9200/customer/external/1
2. POST 请求
接口:POST http://192.168.56.10:9200/customer/external/
PUT和POST都可以
POST新增,如果不指定id,会自动生成id。指定id就会修改这个数据,并新增版本号;
PUT可以新增也可以修改。PUT必须指定id;由于PUT需要指定id,我们一般用来做修改操作,不指定id会报错。
查看文档
/index/type/id
接口:GET http://192.168.56.10:9200/customer/external/1
更新文档
/index/type/id/_update
接口:POST http://192.168.56.10:9200/customer/external/1/_update
几种更新文档的区别
在上面索引文档即保存文档的时候介绍,还有两种更新文档的方式:
当PUT请求带id,且有该id数据存在时,会更新文档;
当POST请求带id,与PUT相同,该id数据已经存在时,会更新文档; 这两种请求类似,即带id,且数据存在,就会执行更新操作。
类比:
请求体的报文格式不同,_update方式要修改的数据要包裹在 doc 键下
_update方式不会重复更新,数据已存在不会更新,版本号不会改变,另两种方式会重复更新(覆盖原来数据),版本号会改变
这几种方式在更新时都可以增加属性,PUT请求带id更新和POST请求带id更新,会直接覆盖原来的数据,不会在原来的属性里面新增属性
删除文档&索引
删除文档
接口:DELETE http://192.168.56.10:9200/customer/external/1
删除索引
接口:DELETE http://192.168.56.10:9200/customer
bulk-批量操作数据
语法格式:
{action:{metadata}}\n // 例如index保存记录,update更新 {request body }\n {action:{metadata}}\n {request body }\n
1. 指定索引和类型的批量操作
接口:POST /customer/external/_bulk
参数:
{"index":{"_id":"1"}} {"name":"John Doe"} {"index":{"_id":"2"}} {"name":"John Doe"}
2. 对所有索引执行批量操作
接口:POST /_bulk
参数:
{"delete":{"_index":"website","_type":"blog","_id":"123"}} {"create":{"_index":"website","_type":"blog","_id":"123"}} {"title":"my first blog post"} {"index":{"_index":"website","_type":"blog"}} {"title":"my second blog post"} {"update":{"_index":"website","_type":"blog","_id":"123"}} {"doc":{"title":"my updated blog post"}}