前言

上篇文章末尾ES集群开启x-pack权限认证后,采用Restful的方式进行了集群简单的验增删改查操作。现在基于Kibana已安装完成的基础上,采用Dev-tools工具进行实战,开发环节中也建议采用这种方式,原因有下:

1)kibana 自带的 dev-tools 工具具有良好的提示功能
2)dev-tools 工具中开发方便快捷,具有较高的效率
3)最终要的一点是不容易出错

那么,此处呢就主要以 Kibana Dev-tools 工具为主,采用DSL语言进行讲述ElasticSearch中常用的的一些命令。

常用命令汇总

索引维护

查看所有索引

1
GET /_cat/indices

创建索引(并且指定分片数量)

1
2
3
4
5
6
7
8
9
10
11
PUT test
{
"settings": {
"number_of_shards": 2,
"number_of_replicas": 2
}
}

# 或者直接创建

PUT test

查看某个索引信息

1
GET test

添加数据(自定义ID)

1
2
3
4
5
6
PUT test/_doc/1
{
"name":"测试1",
"opercation":1,
"location":"ad1,ad2,ad3"
}

添加数据(自动生成ID)

1
2
3
4
POST test/_doc
{
"name":"test2"
}

批量插入数据

1
2
3
4
5
POST _bulk
{"index":{"_index":"tb_user","_id":1}}
{"user":"张三","addres":"广州"}
{"index":{"_index":"tb_user","_id":2}}
{"user":"李四","addres":"北京"}

批量查询多个索引

1
2
3
4
5
6
7
8
9
10
11
12
13
GET _mget
{
"docs": [
{
"_index": "test",
"_id": 1
},
{
"_index": "tb_user",
"_id": 1
}
]
}

查询索引中多行数据

1
2
3
4
GET /tb_user/_doc/_mget
{
"ids":["1","2"]
}

给索引添加字段

1
2
3
4
POST /tb_user/_doc/_update
{
"field1":"广州市天河区"
}

设置字段类型

1
2
3
4
5
6
7
8
9
10
POST /tb_user/_mapping/_doc
{
"properties": {
"field1": {
"type": "long"
},
"field2": {
"type": "keyword"
}
}

更新某条数据值

1
2
3
4
5
6
POST /test/_update/2
{
"doc":{
"age":40
}
}

更新字段值(根据条件查询后更新)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
POST /myindex/_update_by_query
{
"script": {
"source": "ctx._source.name=params.name; ctx._source.city=params.city",
"long": "painless",
"params": {
"name": "test-name",
"city": "北京"
},
"query": {
"match": {
"age": 40
}
}
}
}

索引的关闭和打开

1
2
POST /tb_user/_close
POST /tb_user/_open

删除索引

1
2
DELETE testindex
DELETE myindex/_doc/2

根据查询条件进行删除

1
2
3
4
5
6
7
8
POST myindex/_delete_by_query
{
"query":{
"match":{
"name":"张三"
}
}
}

索引搜索

查询记录是否存在

1
HEAD myindex/_doc/1 

查询数量

1
GET tb_user/_count

查询最新数据记录(默认10条)

1
GET tb_user/_search

查询指定字段

1
2
3
4
GET tb_user/_search
{
"_source": ["user","addres"]
}

查询最新1条数据记录

1
GET tb_user/_search?size=1

搜索(分页)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
GET tb_user/_search
{
"size": 20,
"from": 1
}

GET tb_user/_search
{
"size": 20,
"from": 1,
"query": {
"match_all": {}
}
}

搜索(根据条件分页)

1
2
3
4
5
6
7
8
GET tb_user/_search
{
"query": {
"match": {
"user": "李四"
}
}
}

搜索(根据条件查询[全词匹配])

1
2
3
4
5
6
7
8
GET tb_user/_search
{
"query": {
"match": {
"user.keyword": "李四"
}
}
}

搜索(复合查询:根据多个条件(must and must查询))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
GET tb_user/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"addres": "广州"
}
},
{
"match": {
"user": "test1"
}
}
]
}
}
}

搜索(复合查询:根据多个条件(must or should查询))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
GET tb_user/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"addres": "广州"
}
}
],
"should": [
{
"match": {
"user": "赵六"
}
}
],
"minimum_should_match": 1
}
}
}

主要参数:
must:文档必须匹配这些条件才能被包含进来。
must_not:文档必须不匹配这些条件才能被包含就来。
should:如果满足这些语句中的任意语句,将增加_score,否则无任何影响,主要用于修正每个文档的相关性得分。
filter:必须匹配,但他以不评分、过滤模式来进行,这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。

搜索(仅仅根据条件刷选数据(不做打分处理))

1
2
3
4
5
6
7
8
9
10
11
12
GET tb_user/_search
{
"query": {
"bool": {
"filter": {
"term": {
"addres.keyword": "北京"
}
}
}
}
}

搜索(范围查询)

1
2
3
4
5
6
7
8
9
10
11
GET myindex/_search
{
"query": {
"range": {
"age": {
"gte": 40,
"lte": 30
}
}
}
}

搜索(查询是否存在该字段值的数据)

1
2
3
4
5
6
7
8
GET myindex/_search
{
"query": {
"exists": {
"field": "location"
}
}
}

搜索(多个索引通配符查询)

1
GET tb_*/_search

搜索(批量查询)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
GET /_msearch
{"index" : "myindex"}
{"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
{"index" : "tb_user"}
{"query" : {"match_all" : {}}}
{"index" : "tb_car"}
{"query" : {"match_all" : {}}}

或者(当指定索引名称myindex时,查询条件可以直接使用{}表示默认索引)

GET myindex/_msearch
{}
{"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
{"index" : "tb_user"}
{"query" : {"match_all" : {}}}
{}
{"query" : {"match_all" : {}}}

搜索(聚合分组范围统计)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
GET myindex/_search
{
"size": 0,
"aggs": {
"age_aggs_XXX": {
"range": {
"field": "age",
"ranges": [
{
"from": 0,
"to": 10
},
{
"from": 20,
"to": 30
},
{
"from": 30,
"to": 60
}
]
}
}
}
}

搜索(聚合分组统计)

1
2
3
4
5
6
7
8
9
10
11
12
GET myindex/_search
{
"size": 0,
"aggs": {
"city_agges_nameXXX": {
"terms": {
"field": "age",
"size": 5
}
}
}
}

搜索(根据条件查询后聚合统计)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
GET myindex/_search
{
"size": 0,
"query": {
"match": {
"name": "test-name"
}
},
"aggs": {
"city_agges_xxx": {
"terms": {
"field": "city",
"size": 5
}
}
}
}

搜索(聚合统计个数)

1
2
3
4
5
6
7
8
9
10
11
GET myindex/_search
{
"size": 0,
"aggs": {
"city_agges_xxx": {
"cardinality": {
"field": "city"
}
}
}
}

搜索(多层聚合统计)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
GET myindex/_search
{
"size": 0,
"aggs": {
"city_agges_nameXXX": {
"terms": {
"field": "city",
"size": 5
},
"aggs": {
"avg_nameXXX": {
"avg": {
"field": "age"
}
}
}
}
}
}

搜索(聚合统计函数)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
GET myindex/_search
{
"size": 0,
"aggs": {
"avg_nameXXX": {
"avg": {
"field": "age"
}
}
}
}

GET myindex/_search
{
"size": 0,
"aggs": {
"avg_nameXXX": {
"percentiles": {
"field": "age",
"percents": [10,30,50,80,100]
}
}
}
}

状态 & 统计相关命令清单

获取版本和集群名称等信息

1
GET / 

获取集群健康状态等信息

包括集群名称、节点数、数据节点数、分片等的一些统计信息

1
GET /_cluster/health

获取节点列表信息

显示了堆内存、磁盘使用情况,CPU 、负载和主机角色。
用途:用来监视负载和磁盘使用情况以及主机角色。

1
GET /_cat/nodes?v&h=heap.percent,diskUsedPercent,cpu,load_1m,master,name&s=name

Index Level 索引层面健康

1
GET /_cluster/health?level=indices&pretty

Shard Level 分片层面健康

1
GET /_cluster/health?level=shards&pretty 

获取集群统计状态信息

用途:有助于基本故障排除。

1
GET /_cluster/stats  

获取节点级别的统计信息

包括堆使用情况等

1
GET /_nodes/stats 

线程相关状态&统计命令清单

线程队列视图

1
GET /_cat/thread_pool?v&h=node_name,name,type,active,size,queue,queue_size,rejected,largest,completed,min,max&s=node_name,name

查看热点线程,用于排查CPU资源占用

1
GET /_nodes/hot_threads/ 

快速获取索引模式

例如:所有这些logstash *前缀索引的文档总数的方法。

1
GET /_cat/count/logstash*?v

索引相关状态&统计命令清单

通配符索引列表获取

包含:大小,文档计数,状态等。

1
GET /_cat/indices/logstash*?v

找到size 最大的索引

1
GET /_cat/indices/logstash-*?v&h=index,ss&s=ss:desc

获取状态为黄色的索引

1
GET /_cat/indices?v&health=yellow

红色 red:至少一个主分片不可用。
黄色 yellow:至少一个副本分片不可用。
绿色 green:集群主、副本分片都可用,集群健康。

设置相关清单

Elasticsearch中有许多设置,但最常见的是“集群”和“索引”级别。

集群设置

最基本的集群设置视图-显示非默认的持久性和瞬态设置信息。

1
GET /_cluster/settings

更大的列表视图-包括所有默认值,并使用平面视图使其更易于阅读。

1
GET /_cluster/settings?include_defaults=true&flat_settings=true

索引设置

获取指定索引的设置列表信息。

1
GET /logstash-cron-2020.08.03/_settings 

获取索引的元信息、设置信息以及Mapping信息。

1
GET /logstash-cron-2020.08.03  

关闭&删除索引

关闭索引

支持单个或者模糊匹配多个索引。

1
POST /logstash-*-2020.03.*/_close 

删除索引

支持单个或者模糊匹配多个

1
DELETE /logstash-*-2020.04.* 

故障排查清单

获取已分配和未分配的分片。

1
GET /_cat/shards?v&h=n,index,shard,prirep,state,sto,sc,unassigned.reason,unassigned.details&s=sto,index

查看未分配的分片及原因

1
GET _cat/shards?v&h=index,shard,prirep,state,unassigned.reason&s=state 

查看未分配的细节说明信息

1
GET /_cluster/allocation/explain

查看指定分片未分配的细节

1
2
GET /_cluster/alloGET /_cluster/allocation/explain 
{ "index": "logstash-cloudtrail-2019.10.16", "shard": 0, "primary": true} cation/explain { "index": "logstash-cloudtrail-2019.10.16", "shard": 0, "primary": true}

下线节点

1
2
3
4
5
6
PUT _cluster/settings?pretty
{
"transient": {
"cluster.routing.allocation.exclude._ip": "10.0.0.1"
}
}

模板清单

列举已定义的所有模板

1
GET /_cat/templates?v&s=order,name

列举指定名称的模板信息

1
GET /_template/logstash

快照&恢复

列出系统中配置的快照存储库

大多数其他API调用都需要这些名称。

1
GET /_snapshot 

获取任何正在运行的快照的状态和统计信息

1
GET /_snapshot/_status 

获取快照的有用信息

1
GET /_cat/snapshots/my_repository?v&h=id,status,start_time,duration,indicies,successful_shards,failed_shards,total_shards

分片分配与恢复清单

分片分配查看

1
GET /_cat/allocation?v

分片恢复查看

1
GET /_cat/recovery?v

运行任务查看

1
GET /_cat/pending_tasks?v

清理缓存

1
POST /_cache/clear

结语

以上命令清单由基础到高阶再到运维相关,较为全面,建议收藏,作为整个知识体系的完善与加固。另外强烈建议通过官网进行学习,熟悉官网的目录结构,以便在需要的时候可以快速定位找到自己想要的答案,毕竟官网才是最具权威的。

参考资料:

https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
https://www.elastic.co/guide/index.html

部分内容转载于腾讯云社区:铭毅天下