文章目录
- 简介
- 1. 多个index的匹配方式
- 2. 在index name中使用日期计算模板
- 3. api常见的参数
- 1. 美化展示pretty result
- 2. 便于阅读的格式 human readable output
- 3. 日记计算语法 date math
- 4. 返回结果过滤器 response filter
- 5. setting显示折叠化 setting flatten
- 6. uri传参
- 7. boolean如何表示
- 8. 数字如何表示
- 9. 时间单位 time unit
- 10. 存储单位,byte size unit
- 11. 数字单位制
- 12. 距离单位distance unit
- 13. 模糊匹配的规则
- 14. 开启堆栈信息
- 15. 使用query-string传递request body
- 16. 需要的content-type
- 4. 基于url访问index的限制(index name只能在url中传递)
简介
这篇文章主要介绍es的各个api使用的时候的一些基本的参数或者语法,主要包括3个方面
- 多个index的匹配方式
- 在index name中使用日期计算模板
- api常见的参数
- 基于url访问index的限制(index name只能在url中传递)
1. 多个index的匹配方式
index的匹配规则分为两种,一种是完全匹配,一种是模糊匹配()
完全匹配就是提供索引的全称,比如 test01,test02
等等
模糊匹配就是正常的字符串和通配符*
,比如 test1,test2,test*,*test, *test*
模糊匹配和可以配合非匹配模式使用,比如 test*,-test01
,表示使用test开头的索引,但是要排除test01索引
样例
GET test*,-test01/_search
返回的只有test索引相关的数据, test01中的数据不会被召回
还有几个相关的参数
ignore_unavailable:是否忽略不存在(或者是close)的索引,值可以是true,false
allow_no_indices: 是否允许通配符匹配没有匹配到索引,值可以是true,false
expand_wildcards: 允许通配符匹配什么类型的的索引,值可以是close,open
这几个参数的默认值在不同索引中可能不一样
2. 在index name中使用日期计算模板
在查询中指定index的name的时候可以使用日期计算模板来动态的指定索引的名称。
1. 对应的索引的模式是
<static_name{date_math_expr{date_format|time_zone}}>
static_name: 索引name中的固定字符串部分
date_math_expr: date的计算模板
date_format: 日期的格式
time_zone: 时区,默认为utc时区
2. 一个样例模板
# GET /<logstash-{now/d}>/_search
GET /%3Clogstash-%7Bnow%2Fd%7D%3E/_search
{
"query" : {
"match": {
"test": "data"
}
}
}
字符串都要进行转义
< %3C
> %3E
/ %2F
{ %7B
} %7D
| %7C
+ %2B
: %3A
, %2C
3. 表达式样例
<logstash-{now/d}> logstash-2024.03.22
<logstash-{now/M}> logstash-2024.03.01
<logstash-{now/M{yyyy.MM}}> logstash-2024.03
<logstash-{now/M-1M{yyyy.MM}}> logstash-2024.02
<logstash-{now/d{yyyy.MM.dd|+12:00}}> logstash-2024.03.23
关于日期计算表达式的运算规则,在下一个小节中会具体的讲述
3. api常见的参数
这里讲述的是一些常见的请求参数,大部分是辅助性的参数
1. 美化展示pretty result
?pretty=true
?format=yaml
GET test01/_search?format=yaml
返回
took: 0
timed_out: false
_shards:
total: 1
successful: 1
skipped: 0
failed: 0
hits:
total:
value: 1
relation: "eq"
max_score: 1.0
hits:
- _index: "test01"
_type: "_doc"
_id: "CRCXd3UB0LiXOVZQCY2j"
_score: 1.0
_source:
name: "hahah"
2. 便于阅读的格式 human readable output
?human=false
?human=true
3. 日记计算语法 date math
date math的格式是这样的
1.开头,必须以 now
或者 日期字符串||
开头
2. 进行时间的加减,取某一天等计算(可以没有这一段)
+1h: Add one hour
-1d: Subtract one day
/d: Round down to the nearest day, 最近的一天
y Years
M Months
w Weeks
d Days
h Hours
H Hours
m Minutes
s Seconds
举例,假如当前是now
是 2001-01-01 12:00:00
now+1h : 2001-01-01 13:00:00
now-1h: 2001-01-01 11:00:00
now-1h/d: 2001-01-01 00:00:00
2001.02.01||+1M/d: 2001-03-01 00:00:00
4. 返回结果过滤器 response filter
主要使用了路径过滤
GET /_search?q=elasticsearch&filter_path=took,hits.hits._id,hits.hits._score
GET /_cluster/state?filter_path=metadata.indices.*.stat*
使用两个*可以匹配任何多个路径
GET /_cluster/state?filter_path=routing_table.indices.**.state
5. setting显示折叠化 setting flatten
GET twitter/_settings?flat_settings=true
6. uri传参
这个地方是强调es的rest api的传参方式实际上是和http的传参方式是一致的
7. boolean如何表示
使用字符串的 "true" , "false"
表示 true,false
8. 数字如何表示
直接使用字符串即可,不用再加双引号
9. 时间单位 time unit
d: 天
h: 小时
m: 分钟
s: 秒
ms: 毫秒
micros: 微秒
nanos: 纳秒
10. 存储单位,byte size unit
b,kb,mb,gb,tb, pb
11. 数字单位制
k
m
g
t
p
12. 距离单位distance unit
13. 模糊匹配的规则
fuzziness查询的时候指定单个term的编辑距离,一般是字符级别的编辑距离,默认情况下是auto,
auto的含义是
- term长度小于等于2的时候编辑距离为0,需要完全匹配
- term长度为3-5的时候,编辑距离为1
- term大于5的时候,编辑距离为2
14. 开启堆栈信息
POST /twitter/_search?size=surprise_me&error_trace=true
15. 使用query-string传递request body
16. 需要的content-type
大部分情况下我们都要增加一个 Content-Type
header来标示我们传输的内容的格式
4. 基于url访问index的限制(index name只能在url中传递)
有些时候我们会有一个前置的代理做权限控制,基于访问的uri中携带的index来做权限控制,但是有些人不在uri中使用index,或者在请求的body中重写请求的index,这样就绕过了权限校验
我们可以通过在es中设置禁止在body中使用index name来避免这种情况
rest.action.multi.allow_explicit_index: false
这个配置只能在yml文件中配置