【0】小技巧选项
(0.0)常用基本参数(v,help,bates,header)
-
verbose: 显示列名, 请求参数为v
示例: curl localhost:9200/_cat/master?v
-
help: 显示当前命令的各列含义, 请求参数为help. 某些命令部分列默认不显示,可通过help该命令可显示的所有列
示例: curl localhost:9200/_cat/master?help
-
bytes: 数值列还原为原始值. 如diskSize, 默认转为以kb/mb/gb表示, 打开后还原为原始值
示例: curl localhost:9200/_cat/indices?bytes=b
-
header: 显示指定列的信息, 请求参数为h
示例: curl localhost:9200/_cat/indices?h=i,tm(显示集群各索引的内存使用)
演示:
1. verbose
每个命令都支持使用?v参数,来显示详细的信息:
curl 172.16.221.104:9400/_cat/master?v
id host ip node
xO8UJK_dQTKvv1wgpYQIKg *.*.221.12 *.*.221.12 node1
2.help
每个命令都支持使用help参数,来输出可以显示的列:
curl 172.16.221.104:9400/_cat/master?help
id | | node id
host | h | host name
ip | | ip address
node | n | node name
3.bytes
很多的命令都支持返回可读性的大小数字,比如使用mb或者kb来表示。
curl 172.16.221.104:9400/_cat/indices?bytes=kb
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open .kibana QTYWgFweRJm2RohdZQKLRw 1 1 41 1 140.3kb 140.3kb
......
4.headers
通过h参数,可以指定输出的字段:
curl 172.16.221.104:9400/_cat/master?v
id host ip node
xO8UJK_dQTKvv1wgpYQIKg *.*.221.12 *.*.221.12 node1
curl 172.16.221.104:9400/_cat/master?h=ip,node
*.*.221.12 node1
参考:https://www.bookstack.cn/read/elasticsearch-7.9-en/a397f9b7db759452.md#b58esa
(0.1)结果格式:?pretty=true、?format=yaml
到发出的任何请求时,返回的JSON将采用漂亮的格式(仅用于调试!)。另一个选项是设置?format=yaml
,这将导致结果以(有时)更具可读性的Yaml格式返回。
(0.2)结果单位:?human=Ture
以适合于人类(例如"exists_time": "1h"
或"size": "1kb"
)和适合计算机(例如"exists_time_in_millis": 3600000
或"size_in_bytes": 1024
)的格式返回统计信息。
可以通过添加?human=false
到查询字符串来关闭人类可读的值。当统计结果被监视工具消耗而不是供人类消耗时,这是有道理的。该human
标志的默认值为false
。
(0.3)日期运算:now-1h
它接受一个格式化的日期值大多数参数-比如gt
和lt
中range
查询,或from
与to
在daterange
聚集 -了解最新的数学。
表达式以锚定日期开头,可以是,也可以是以now
结尾的日期字符串||
。这个锚定日期可以有选择地跟随一个或多个数学表达式:
+1h
:增加一小时-1d
:减去一日/d
:四舍五入到最近的一天
在持续时间内,支持的时间单位不同于时间单位支持的时间单位。支持的单位是:
|
年 |
|
月数 |
|
周数 |
|
天 |
|
小时 |
|
小时 |
|
分钟 |
|
秒 |
假设now
为2001-01-01 12:00:00
,则一些示例为:
|
|
|
|
|
|
|
|
(0.4)内容过滤:?filter_path=..
所有REST API都接受一个filter_path
参数,该参数可用于减少Elasticsearch返回的响应。
此参数采用逗号分隔的过滤器列表,并用点符号表示:
GET /_search?q=kimchy&filter_path=took,hits.hits._id,hits.hits._score
结果:
{ "took" : 3, "hits" : { "hits" : [ { "_id" : "0", "_score" : 1.6375021 } ] } }
它还支持*
通配符以匹配任何字段或字段名称的一部分:
GET /_cluster/state?filter_path=metadata.indices.*.stat*
结果:
{ "metadata" : { "indices" : { "my-index-000001": {"state": "open"} } } }
并且 **
通配符可用于包括字段,不知道现场的确切路径。
例如,我们可以使用以下请求返回每个段的Lucene版本:
GET /_cluster/state?filter_path=routing_table.indices.**.state
{ "routing_table": { "indices": { "my-index-000001": { "shards": { "0": [{"state": "STARTED"}, {"state": "UNASSIGNED"}] } } } } }
也可以通过为过滤器添加char前缀来排除一个或多个字段 _:
GET /_count?filter_path=-_shards
{ "count" : 5 }
如何多个参数一起用:curl localhost:9200/_cat/master?v&pretty
【增删改查】
(1)增加 index/create:PUT/POST
index操作:就是直接覆盖(覆盖即:删除后新增)
create操作:就是新增,如果要新增的已经存在,则报错
// index:存在则覆盖,不存在则创建 PUT users/_create/1 { "user":"张三", "age":28, "message":"he is a dba" } // create:create document 指定id,如果已经存在,就报错; 且若需要指定id,则必须要用 PUT //(文档存在则报错,不存在则新建) PUT users/_create/1 { "user":"张三", "age":28, "message":"he is a dba" } // create:create document 自动生成_id,必须用 POST,_doc后面才能不指定 id //(索引存在则自动生成新_id,不存在则新建索引=》然后自动生成新的_id) POST users/_doc { "user":"张三", "age":28, "message":"he is a dba" } // create:create document 指定ID,如果ID存在则报错 // 文档存在则报错,不存在则新建;同时索引如果不存在也会新建 POST users/_doc/1?op_type=create { "user":"张三", "age":28, "message":"he is a dba" }
(2)update:POST
POST 直接修改,_version 可以
// create/replace document 不存在则新建,存在则覆盖(删除原有创建新的,_version+1) PUT users/_doc/1 { "user":"tom" } GET users/_doc/1
// 在原文档上增加字段 POST users/_update/1/ { "doc": { "age":1, "messages":"hello world" } }
GET users/_doc/1
(3)批量操作:_bulk
每一次 增删改以及index操作,都会返回结果集
POST _bulk { "index":{"_index":"test","_id":"1"} } { "field1":"value1" } { "delete":{"_index":"test","_id":"2"} } { "create":{"_index":"test2","_id":"3"} } { "field1":"value3" } { "update":{"_id":"1","_index":"test"} } { "doc":{"field2":"value2"} }
(4)查询:GET/_mget/_msearch
GET users/_doc/1 --基本查询文档 GET users,users1 --查询多个索引
批量查询:MGET
_msearch:
【1】多个资源请求
(1.1)基本查多个索引
您可以使用逗号分隔的列表对多个资源
test1,test2,test3
(1.2)通配符,like 之类的模糊查询
还可以使用通配符 * ,如:
test*或*test或te*t或*test*。
您可以使用以下-字符排除目标:test*,-test3。
(1.3)别名引起的问题
索引别名在通配符表达式之后解析。这可能会导致针对排除的别名的请求。
例如,如果test3
是索引 abc 的别名,则该模式test*,-test3
仍将定位到的索引test3
。
为了避免这种情况,请排除别名的具体索引。如:test*,-abc
(1.4)多目标API的字符串参数
ignore_unavailable :(可选,布尔值)如果为true
,则响应中不包含缺少或闭合的索引。默认为false
allow_no_indices:(可选,布尔值)如果true
,请求并不如果通配符表达式或者返回一个错误_all
值仅检索丢失或封闭的索引。此参数还适用于指向别名缺失或封闭索引的索引别名。
expand_wildcards:
(可选,字符串)控制通配符表达式可以扩展到的索引类型。如用逗号分隔,可以接受多个值open,hidden
。有效值为:
all:展开以打开和关闭索引,包括隐藏索引。
open:仅展开以打开索引。
closed:仅扩展到封闭索引。
hidden:通配符的扩展将包括隐藏的索引。必须与之合并open,closed或两者兼而有之。
none:不接受通配符表达式。
ignore_throttled :(可选,布尔值)如果为true
,冻结时将忽略具体的索引,扩展的索引或别名索引。默认为true
。
【2】索引名称中对日期的数学支持
(2.1)作用
日期数学索引名称解析使您可以搜索一系列时间序列索引,而不必搜索所有时间序列索引并过滤结果或维护别名。
限制搜索索引的数量可以减少群集上的负载并提高执行性能。
例如,如果您要在日常日志中搜索错误,则可以使用日期数学名称模板将搜索范围限制为过去两天。
几乎所有具有index
参数的API都在index
参数值中支持日期数学。
日期数学索引名称采用以下形式:
<static_name{date_math_expr{date_format|time_zone}}>
参数释义:
|
是名称的静态文本部分 |
|
是动态日期数学表达式,可动态计算日期 |
|
是一种可选格式,应以这种格式呈现计算出的日期。默认为 |
|
是可选的时区。默认为 |
请注意空格中小写与大写字母的用法date_format
。
例如:mm
表示小时,而MM
表示月份。
类似地,结合表示范围内hh
的小时,而表示24小时范围内的小时。1-12
AM/PM
HH
0-23
日期数学表达式与语言环境无关。因此,除了公历以外,无法使用其他日历。
您必须将日期数学索引名称表达式括在尖括号内,并且所有特殊字符均应进行URI编码。例如:
# PUT /<my-index-{now/d}>
PUT /%3Cmy-index-%7Bnow%2Fd%7D%3E
(2.2)日期数学字符的百分比编码
用于日期舍入的特殊字符必须使用URI编码,如下所示
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
以下示例显示了不同形式的日期数学索引名称,以及在当前时间为2024年3月22日正午utc时,它们解析为的最终索引名称。
表达 | 解析为 |
---|---|
|
|
|
|
|
|
|
|
|
|
要使用字符{ and
}
在索引名称模板的静态部分中,请使用反斜杠对其进行转义,例如:
<elastic{ON}-{now/M}> 解析为 elastic{ON}-2024.03.01
(2.3)案例
以下示例显示了一个搜索请求,该搜索请求在过去三天中搜索Logstash索引,假设索引使用默认的Logstash索引名称格式logstash-yyyy.MM.dd
。
# GET /<logstash-{now/d-2d}>,<logstash-{now/d-1d}>,<logstash-{now/d}>/_search GET /%3Clogstash-%7Bnow%2Fd-2d%7D%3E%2C%3Clogstash-%7Bnow%2Fd-1d%7D%3E%2C%3Clogstash-%7Bnow%2Fd%7D%3E/_search { "query" : { "match": { "test": "data" } } }
【3】cron 定时任务 表达式
(3.1)作用、一般形式
其实就和linux的 cron 一样
cron表达式是以下形式的字符串:
<seconds> <minutes> <hours> <day_of_month> <month> <day_of_week> [year]
Elasticsearch使用Quartz Job Scheduler中的cron解析器。有关编写Quartz cron表达式的更多信息,请参见Quartz CronTrigger教程。
所有计划时间均以协调世界时(UTC)为准;不支持其他时区。
您可以使用elasticsearch-croneval命令行工具来验证您的cron表达式。
(3.2)Cron表达式的元素
除以外,所有元素都是必需的year
。有关允许的特殊字符的信息,请参见Cron特殊字符。
<seconds>
(必填)有效值:0
-59
和特殊字符,
-
*
/
<minutes>
(必填)有效值:0
-59
和特殊字符,
-
*
/
<hours>
(必填)有效值:0
-23
和特殊字符,
-
*
/
<day_of_month>
(必填)有效值:1
-31
和特殊字符,
-
*
/
?
L
W
<month>
(必需)有效值:1
- 12
,JAN
- DEC
,jan
-dec
和特殊字符,
-
*
/
<day_of_week>
(必需)有效值:1
- 7
,SUN
- SAT
,sun
-sat
和特殊字符,
-
*
/
?
L
#
<year>
(可选)有效值:1970
-2099
和特殊字符,
-
*
/
(3.3)Cron特殊字符(*_?,/LW)
*
选择一个字段的每个可能的值。例如,*
在该hours
字段中表示“每小时”。
?
没有具体值。当您不在乎值是什么时使用。例如,如果您希望计划在每月的特定日期触发,但不在乎星期几,则可以?
在day_of_week
字段中指定。
-
值的范围(含)。用于分隔最小值和最大值。例如,如果您希望时间表在上午9:00和下午5:00之间每小时触发一次,则可以9-17
在hours
字段中指定。
,
多个值。用于分隔字段的多个值。例如,如果您希望时间表在每个星期二和星期四触发,则可以TUE,THU
在day_of_week
字段中指定。
/
增量。指定时间增量时用于分隔值。第一个值代表起点,第二个值代表间隔。例如,如果您希望时间表从小时的顶部开始每20分钟触发一次,则可以0/20
在minutes
字段中指定。同样,从该月的第一天开始,1/5
在day_of_month
字段中指定将每5天触发一次。
L
最后的。在该day_of_month
字段中使用时表示月份的最后一天-非years年的1月31日,2月的28日,4月的30日,依此类推。在day_of_week
字段中单独使用代替7
或SAT
,或在一周中的特定日期之后选择该类型在月中的最后一天。例如,6L
表示月份的最后一个星期五。您可以LW
在day_of_month
字段中指定以指定该月的最后一个工作日。L
在指定值列表或值范围时避免使用该选项,因为结果可能不会达到您的期望。
W
平日 用于指定最接近给定日期的工作日(星期一至星期五)。例如,如果您15W
在day_of_month
字段中指定,而15号是星期六,那么时间表将在14号触发。如果15日是星期日,则时间表将在16日星期一触发。如果15日是星期二,则时间表将在15日星期二触发。但是,如果您将1W
的值指定为day_of_month
且第一个是星期六,则时间表将在第3个星期一触发-它不会跳过月份边界。您可以LW
在day_of_month
字段中指定以指定该月的最后一个工作日。您只能在W
当天day_of_month
是一天时使用该选项-在指定日期范围或日期列表时无效。
#
一个月中的第N个XXX天。在day_of_week
字段中使用以指定每月的第XXX天。例如,如果指定6#1
,则计划将在该月的第一个星期五触发。请注意,如果您指定3#5
并且特定月份中没有5个星期二,则计划不会触发该月份。
(3.4)案例
设置每日触发
0 5 9 * * ?
每天在世界标准时间上午9:05触发。
0 5 9 * * ? 2020
2020年期间,每天在世界标准时间上午9:05触发。
将触发器限制在几天或时间范围内
0 5 9 ? * MON-FRI
星期一至星期五,世界标准时间上午9:05触发。
0 0-5 9 * * ?
从UTC上午9:00开始到UTC每天9:05结束,每分钟触发一次。
设置间隔触发
0 0/15 9 * * ?
从UTC上午9:00开始到每天UTC上午9:45结束,每15分钟触发一次。
0 5 9 1/3 * ?
从每月的第一天开始,每月每3天在UTC上午9:05触发。
设置在特定日期触发的时间表
0 1 4 1 4 ?
在每年世界标准时间4月1日凌晨4:01触发。
0 0,30 9 ? 4 WED
4月的每个星期三,在UTC上午9:00和UTC上午9:30触发。
0 5 9 15 * ?
在每个月的15日(世界标准时间)上午9:05触发。
0 5 9 15W * ?
在每个月15日最近的工作日(世界标准时间)上午9:05触发。
0 5 9 ? * 6#1
在每个月的第一个星期五上午9:05触发。
使用last设置触发器
0 5 9 L * ?
在每个月的最后一天上午9:05在世界标准时间触发。
0 5 9 ? * 2L
在每个月的最后一个星期一的UTC上午9:05触发。
0 5 9 LW * ?