01.elasticsearch请求使用的基本语法

简介

这篇文章主要介绍es的各个api使用的时候的一些基本的参数或者语法,主要包括3个方面

  1. 多个index的匹配方式
  2. 在index name中使用日期计算模板
  3. api常见的参数
  4. 基于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

举例,假如当前是now2001-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的含义是

  1. term长度小于等于2的时候编辑距离为0,需要完全匹配
  2. term长度为3-5的时候,编辑距离为1
  3. term大于5的时候,编辑距离为2

14. 开启堆栈信息

POST /twitter/_search?size=surprise_me&error_trace=true

15. 使用query-string传递request body


16. 需要的content-type

大部分情况下我们都要增加一个 Content-Typeheader来标示我们传输的内容的格式

4. 基于url访问index的限制(index name只能在url中传递)

有些时候我们会有一个前置的代理做权限控制,基于访问的uri中携带的index来做权限控制,但是有些人不在uri中使用index,或者在请求的body中重写请求的index,这样就绕过了权限校验
我们可以通过在es中设置禁止在body中使用index name来避免这种情况

rest.action.multi.allow_explicit_index: false

这个配置只能在yml文件中配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值