一、Docket安装Elasticsearch
1、下载镜像文件
安装命令 | 用途 |
---|---|
docker pull elasticsearch:7.9.2 | 存储和检索数据 |
docker pull kibana:7.9.2 | 可视化检索数据 |
注意:elasticsearch的版本必须和kibana的版本是相同的。
2、创建实例
2.1、ElasticSearch
安装命令 | 作用 |
---|---|
mkdir -p /mydata/elasticsearch/config | 创建一个配置文件夹 |
mkdir -p /mydata/elasticsearch/data | 创建一个存放检索数据的文件夹(好比安装mysql的时候需要在mysql中创建一个data文件夹) |
echo “http.host:0.0.0.0”>>/mydata/elasticsearch/config/elasticsearch.yml |
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
-v /mydata/elasticsearch/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.9.2
以后在外面安装插件重启即可。
#启动elasticsearch并且将端口号映射到主机上,9300是es在分布式集群环境下的通信端口。“discovery.type=single-node”表示es是以单节点模式运行。“ES_JAVA OPTS=“-Xms64m -Xmx128m””是由于ES已启动将会占用整个内存,这样Liunx就会卡死,将ES的占用内存设置为最小64m,最大126m。
特别注意:
-e ES_JAVA_OPTS=“-Xms64m -Xmx128m” \ 测试环境下,设置ES的初始内存和最大内存,否则导致过大启动不了ES;
2.2、检测ES启动错误的方法
由于我们使用的是docker容器,所以使用 docker logs elasticsearch这个命令打印出elasticsearch的日志消息。
使用 chmod -R 777 /mydata/elasticsearch/ 改变config、data、plugins文件夹的权限。
2.3、向ElasticSearch发送请求
-
localhost:9200/_cat/nodes:查看ES下的全部节点
查询到的结果: 127.0.0.1 28 84 11 dilmrt * WIN-NQTK0V7R9FC “*”:在集群的环境下代表着主节点。
3、安装Kinbana
docker run --name kibana -e ELASTICSEARCH_HOST=http://***.***.**.**:9200 -p 5601:5601 \
-d kibana:7.9.2
4、初步检索
4.1、_cat
- GET /_cat/nodes:查看所有节点。
- GET /_cat/health:查看es的健康状态。
- GET /_cat/master:查看主节点。
- GTE :查看所有索引 show database;
4.2、索引一个文档(相当于MySQL的保存一条记录)
保存一个数据,保存在哪个索引的那个类型下,指定用哪个唯一标识。
PUT customer/external/1;在customer 索引下的external 类型下保存 1号数据为:
PUT customer/external/1
{
"name":"张三"
}
PUT和POST请求都可以。
POST 新增。如果不指定id,会自动生成id。指定id就会修改这个id的数据,并增加版本号。
PUT 可以新增可以修改。PUT必须指定id;由于PUT需要指定id,我们一般都用来做修改操作,不指定id会报错。
4.3、查询文档
查询文档是发送GET请求的 :
customer/external/1
结果:
{
"_index": "customer", //在哪个索引 (相当于MySQL中的 在哪个数据库中)
"_type": "external", //在哪个类型 (相当于MySQL中的在哪个表中)
"_id": "1", //记录id
"_version": 2, //版本号
"_seq_no": 1, //并发控制字段,每一更新就会+1,用来做乐观锁
"_primary_term": 1, //同上,主分片重新分配,如重启,就会变化
"found": true,
"_source": {
"name": "张三"
}
}
更新携带:
?if_esq_no = 0&if_primary_term=1
4.4、更新文档
POST customer/external/1/_update
{
"doc":{
"name":"占山"
}
}
或者
POST customer/extrnal/1
{
"name":"张三"
}
或者
PUT customer/extrnal/1
{
"name":"John Doe"
}
不同:
post操作会对比源文档数据,如果相同不会有操作,文档的version也不会增加。PUT操作总会将数据重新保存并增加version版本。
带 "_update"会对比源数据如果一样就不进行任何操作。
使用场景:
对于大并发更新,不带update;
对于大并发查询偶尔更新,带update;对比更新,重新计算分配规则。
更行同时增加属性
POST customer/external/1/_update
{
"doc":{
"name":"Jane Doe","age":"20"}
}
4.5、删除文档&索引
DELETE customer/external/1
DELETE customer
4.6、bulk批量API
POST customer/external/_bulk
{
"index":{
"_id":"1"}}
{
"name":"Jon Doe"}
{
"index":{
"_id":"2"}}
{
"name":"Jane Doe