【Elasticsearch7.0】之集群初次探索
rest api
如果你的es已经启动了,那么我们需要知道怎么来使用es。es提供了rest接口,可以直接通过rest请求访问es。那么api可以做哪些事情呢:
1、检查你的集群,节点,索引的健康状况,检查状态和统计数据;
2、管理你的集群,节点,索引数据和元数据;
3、执行CRUD(创建、查询、修改、删除)和对索引进行搜索;
4、执行高级搜索,如分页、排序、过滤、脚本、聚合等等;
集群健康
通过集群健康检查,我们可以查看集群运行情况。可以使用curl或者其他支持HTTP/REST访问的工具。
使用_cat接口检查集群健康状态。使用下面接口:
GET /_cat/health
返回值
1558155845 05:04:05 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0%
也可以使用下面api,可以显示标题。
GET /_cat/health?v
返回值
我们可以看到“elasticsearch”集群的运行状态是绿色。
一般集群状态会存在三种颜色,分别是绿色,黄色,红色。
1、绿色:一切都好,集群出于最佳状态
2、黄色:所有数据可用,但是一些副本没有分配。集群还是可以用的。
3、红色:一些数据不能用,集群部分可以用。
集群处于红色状态时,只有一部分分片在提供服务,你应该及时去修复那些不可用的分片。
我们看到返回结果里,node.total=1,node.data=1,shards=0,说明里面还没有数据。我们这边启动的集群名字是默认的,所以你在检测健康的时候,可能会发现多个节点,那是因为别人可能也使用了默认的配置启动,所以建议在实际操作中自己定义好集群名字。
参数 | 描述 |
---|---|
epoch | 时间戳,包含年月日时分秒 |
timestamp | 时间戳,只包含时分秒 |
cluster | 集群名称 |
status | 集群状态 |
node.total | 总节点数 |
node.data | 数据存储节点 |
shards | 分片数量 |
pri | 主分片数量 |
relo | 迁移分片数量 |
init | 正在初始化的分片数量 |
unassign | 未指定的分片数量 |
pending_tasks | 等待中的任务 |
max_task_wait_time | 任务最大等待时间 |
active_shards_percent | 活跃分片占比 |
查看节点
我们也可以查看集群下的所有节点
GET /_cat/nodes?v
返回值
可以看到我们的节点名称是:LAPTOP-F7KM7C74。当前集群下只有一个节点。
参数 | 描述 |
---|---|
ip | IP地址 |
heap.percent | 使用堆的百分比 |
ram.percent | 使用总内存百分比 |
cpu | cpu使用百分比 |
load_1m | 最近1分钟平均负载 |
load_5m | 最近5分钟平均负载 |
load_15m | 最近15分钟平均负载 |
node.role | 节点角色,主节点(m);数据节点(d);预处理节点(i);协调节点(-) |
master | 是否为主节点,*表示主节点,-表示非主节点; |
name | 节点的名称 |
查看索引
GET /_cat/indices?v
返回值
表示当前集群下还没有索引。
创建索引
下面让我们来创建一个索引:
PUT /user?pretty
返回值
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "user"
}
表示创建成功。加上pretty只是为了让返回值以漂亮的json输出。当你在使用curl命令时,该参数比较有用。
接下来再来查询索引,会得到下面的结果:
可以看到,现在存在一个索引,名字叫user,他有一个主分片和一个副本(默认),当前没有文档,没有稳定被删除。
你可能注意到,当前的索引健康状态是黄色,因为创建索引的时候es默认会创建一个副本,但是副本不能跟当前节点在一起,所以副本其实是没有创建的,只有当第二个节点加入到集群的时候,这个时候会去创建该索引的节点,这时你在执行监控检查,状态就会变成绿色。
参数 | 描述 |
---|---|
health | 健康状态值有绿色、黄色、红色 |
status | 状态 |
index | 索引名称 |
uuid | 唯一标识 |
pri | 主分片 |
rep | 副本分片 |
docs.count | 文档数量,不包含删除的数据 |
docs.deleted | 文档删除数量 |
store.size | 存储大小 |
pri.store.size | 主分片存储大小 |
创建文档
现在我们在user索引里面加一些数据,
PUT /user/_doc/1
{
"name":"jack"
}
返回值
{
"_index": "user",
"_type": "_doc",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 2
}
返回这些数据,表示文档创建成功了。文档的内部id为1,是我们刚才指定的。当然,你在创建文档的时候不一定要先创建索引,因为创建文档的时候如果索引不存在就会自动创建。
查询文档
查询文档接口
GET /user/_doc/1
返回值
{
"_index": "user",
"_type": "_doc",
"_id": "1",
"_version": 3,
"_seq_no": 2,
"_primary_term": 2,
"found": true,
"_source": {
"name": "jack"
}
}
found为true表示发现数据了,_source表示返回的之前保存进去的数据,以json格式存储。
删除索引
现在我们来删除之前创建的索引。然后在看看索引的列表。
DELETE /user
返回值
{
"acknowledged": true
}
查询索引列表
GET _cat/indices
返回值
表示数据已经删除了。
从上面的一些命令上看,可以总结出es的接口语法:
<HTTP Verb> /<Index>/<Endpoint>/<ID>
也可以关注我的公众号:程序之声
关注公众号,领取更多资源。