一、回顾
1.介绍ES
2.ES原理
3.ES功能
4.ES使用场景
5.ES安装
1)ES配置文件(单点配置)
[root@es01 ~]# grep '^[a-z]' /etc/elasticsearch/elasticsearch.yml
node.name: es-1
path.data: /data/es/data
path.logs: /data/es/log
bootstrap.memory_lock: true
network.host: 10.0.0.71,127.0.0.1,172.16.1.71
http.port: 9200
二、跟ES交互的方式
1.使用curl命令
#创建索引
[root@es01 ~]# curl -XPUT 'http://10.0.0.71:9200/test1?pretty'
{"acknowledged" : true,"shards_acknowledged" : true,"index" : "test1"
}#插入数据
[root@es01 ~]# curl -XPUT '10.0.0.71:9200/student/user/1?pretty' -H 'Content-Type: application/json' -d '{"name": "lhd","sex":"man","age":"18","about":"good good study","interests":["chinese","english"]}'
2.使用head插件的方式
3.kibana的方式
1)安装
[root@es01 ~]# ll
-rw-r--r-- 1 root root 185123116 Jan 29 2019 kibana-6.6.0-x86_64.rpm[root@es01 ~]# rpm -ivh kibana-6.6.0-x86_64.rpm
2)配置kibana
[root@es01 ~]# grep '^[a-z]' /etc/kibana/kibana.yml
server.port: 5601
server.host: "10.0.0.71"
elasticsearch.hosts: ["http://10.0.0.71:9200"]
3)启动
[root@es01 ~]# systemctl start kibana[root@es01 ~]# netstat -lntp | grep 5601
tcp 0 0 10.0.0.71:5601 0.0.0.0:* LISTEN 14960/node
4)访问
http://10.0.0.71:5601
三、ES数据的操作
1.创建索引
1)语法
PUT /<index>
2)示例
PUT /indexcurl -XPUT 'http://10.0.0.71:9200/index'
2.创建数据
1)数据结构
ES存储三个必要构成
_index
_type
_id
构成 |
说明 |
_index |
索引(数据存储的地方) |
_type |
类型(数据对应类) |
_id |
数据的唯一标识 |
2)语法
PUT /<index>/_doc/<_id>
POST /<index>/_doc/
PUT /<index>/_create/<_id>
POST /<index>/_create/<_id>index:索引的名称,如果索引不存在,会自动创建
_doc:类型
_id:唯一标识,可以手动指定,也可以自动生成
3)使用自定义ID插入数据
PUT /index/_doc/1
{"name":"qiudao","age":"18"
}#该方式企业应用较少1.需要修改id的值2.指定ID插入数据时,ES会先拿着指定的id去对比一遍所有数据,看看有没有相同值
4)使用随机ID插入数据
POST /index/_doc/
{"name":"qiudao","age":"20"
}
5)添加字段指定ID
POST /index/_doc/
{"id":"1","name":"qiudao","age":"20"
}
3.查询数据
1)简单查询
#查询所有索引的信息
GET /_all
GET _all#查看所有索引的数据
GET /_all/_search#查看指定索引的信息
GET /teacher#查看指定索引的数据
GET /teacher/_search#查看索引中指定的数据
GET /teacher/user/2
GET /teacher/user/1m-gGHYB5ia7o7wd9dPk
2)单条件查询
1>方法一:
GET /teacher/_search
{"query": {"term": {"age": {"value": "18"}}}
}
2>方法二:
GET /teacher/_search
{"query": {"term": {"age": "18"}}
}
3>方法三:
GET /teacher/_search
{"query": {"match": {"age": "18"}}
}#指定条件可以使用term也可以使用match,term搜索数据时不进行分词,适合进行精确查找,match搜索时进行分词适用于全文检索
3)多条件查询
1>must查询
#多个查询条件必须全部满足 &
GET /teacher/_search
{"query": {"bool": {"must": [{"term": {"age": {"value": "18"}}},{"term": {"sex": {"value": "nv"}}}]}}
}
2>filter查询
#跟must作用一样,但是速度要比must快一点
GET /teacher/_search
{"query": {"bool": {"filter": [{"term": {"age":"18"}},{"term": {"sex":"nv"}}]}}
}
3>should查询
#多条件查询时,符合其中一个条件就可以 |
GET /teacher/_search
{"query": {"bool": {"should": [{"term": {"age": {"value": "18"}}},{"term": {"id": {"value": "5"}}}]}}
}
4)must_not
GET /teacher/_search
{"query": {"bool": {"must_not": [{"term": {"age": {"value": "18"}}},{"term": {"id": {"value": "5"}}}]}}
}
5)must和should结合使用
#查询年龄是21或者年龄是18岁并且名字是lizhenglin的数据
GET /teacher/_search
{"query": {"bool": {"should": [{"term": {"age": {"value": "21"}}},{"bool": {"must": [{"term": {"age": {"value": "18"}}},{"term": {"name": {"value": "lizhenglin"}}}]}}]}}
}
4.修改数据
#修改数据通过_id进行修改,修改数据是,除了要修改的字段意外,其他的字段也要全部写上
PUT /teacher/user/9G-FHXYB5ia7o7wdEdOH
{"id":"6","name":"wananfeng","sex":"nan","age":"25"
}
5.删除数据
#删除指定数据,通过_id进行选择删除
DELETE /teacher/user/9G-FHXYB5ia7o7wdEdOH#删除索引
DELETE /teacher
四、ES集群
1.ES插件页面
1)集群状态
1.红色:数据不完整
2.黄色:数据完整,但是副本有问题
3.绿色:数据和副本全部都没有问题,集群状态正常
2)节点类型
1.主节点:负责调度分配数据存储
2.数据节点:负责储存由主机点传来的数据
3)分片
1.主分片:存储数据,负责读写数据
2.副本分片:主分片的备份,当主分片故障时,提供有问题的数据
2.搭建集群
1)准备服务器
主机 |
IP |
es01 |
10.0.0.71 |
es02 |
10.0.0.72 |
es03 |
10.0.0.73 |
2)时间同步
[root@es01 ~]# ntpdate time1.aliyun.com
[root@es02 ~]# ntpdate time1.aliyun.com
[root@es03 ~]# ntpdate time1.aliyun.com
3)安装java环境
[root@es01 ~]# scp jdk-8u181-linux-x64.rpm 172.16.1.72:/root/
[root@es01 ~]# scp jdk-8u181-linux-x64.rpm 172.16.1.73:/root/[root@es01 ~]# yum localinstall -y jdk-8u181-linux-x64.rpm
[root@es02 ~]# yum localinstall -y jdk-8u181-linux-x64.rpm
[root@es03 ~]# yum localinstall -y jdk-8u181-linux-x64.rpm
4)安装ES
[root@es01 ~]# scp elasticsearch-6.6.0.rpm 172.16.1.72:/root
[root@es01 ~]# scp elasticsearch-6.6.0.rpm 172.16.1.73:/root[root@es01 ~]# rpm -ivh elasticsearch-6.6.0.rpm
[root@es02 ~]# rpm -ivh elasticsearch-6.6.0.rpm
[root@es03 ~]# rpm -ivh elasticsearch-6.6.0.rpm[root@es01 ~]# systemctl daemon-reload
[root@es02 ~]# systemctl daemon-reload
[root@es03 ~]# systemctl daemon-reload
5)配置ES
1>第一台机器的配置
[root@es01 ~]# grep '^[a-z]' /etc/elasticsearch/elasticsearch.yml
#集群的名称
cluster.name: es-cluster
node.name: es-1
path.data: /data/es/data
path.logs: /data/es/log
bootstrap.memory_lock: true
network.host: 10.0.0.71,127.0.0.1,172.16.1.71
http.port: 9200
#集群中的服务器ip地址
discovery.zen.ping.unicast.hosts: ["172.16.1.71", "172.16.1.72"]
#选举主节点时投票的机器数
discovery.zen.minimum_master_nodes: 2
2>第二台机器的配置
[root@es02 ~]# grep '^[a-z]' /etc/elasticsearch/elasticsearch.yml
cluster.name: es-cluster
node.name: es-2
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 172.16.1.72,10.0.0.72,127.0.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["172.16.1.72", "172.16.1.73"]
discovery.zen.minimum_master_nodes: 2
3>第三台机器的配置
[root@es03 ~]# grep '^[a-z]' /etc/elasticsearch/elasticsearch.yml
cluster.name: es-cluster
node.name: es-3
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 172.16.1.73,10.0.0.73,127.0.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["172.16.1.73", "172.16.1.71"]
discovery.zen.minimum_master_nodes: 2
4>三台机器都修改启动脚本
[root@es02 ~]# vim /usr/lib/systemd/system/elasticsearch.service
[Service]
... ...
LimitMEMLOCK=infinity
6)启动三台ES
[root@es01 ~]# systemctl start elasticsearch
[root@es01 ~]# netstat -lntp | grep java