elasticsearch API约定(一)

前面我们介绍了一些REST API的基本用法,使读者对API的使用有了一个直观的了解,本文我们来介绍下Elasticsearch中的API约定,这些约定适用于大部分的REST API,在后面文章的介绍中,除非另有说明,否则本文所介绍的API约定都将适用于相应的API。

本文是Elasticsearch系列的第五篇,阅读前面的文章,有助于更好的理解本文:


1.elasticsearch安装与配置
2.初识elasticsearch中的REST接口
3.elasticsearch修改数据
4.elasticsearch文档操作


多个索引

在前面的查询案例中,我们使用的都是单个索引,实际上Elasticsearch也支持多个索引查询,在多个索引查询中,Elasticsearch支持如下几种方式:

  • 支持使用简单表示法,如test1,test2,test3表示法

  • 使用_all表示所有索引

  • 使用通配符,如 test*或 *test或 te*t或 *test*

  • 也支持排除能力,例如:test*,-test3

在所有的多索引API中都支持以下URL查询参数:

ignore_unavailable

这个参数表示,当指定多个索引时,如果有索引不可用(不存在或者已经关闭)那么是否忽略该索引。true表示忽略,false表示不忽略,默默认为false。
例如如下请求表示查看索引bank和索引bank2中的文档(实际上bank2不存在):

curl -X GET "localhost:9200/bank,bank2/_search?q=*&sort=account_number:asc&pretty"

该请求执行结果如下:

640?wx_fmt=png

可以看到,由于bank2这个索引不存在,因此执行失败,如果加上ignore_unavailable参数则可以执行成功,如下:

curl -X GET "localhost:9200/bank,bank2/_search?q=*&sort=account_number:asc&pretty&ignore_unavailable=true"

执行结果如下:

640?wx_fmt=png

allownoindices

这个参数表示如果查询的时候使用了通配符,但是通配符没有匹配到任何索引,此时是否查询失败?该参数默认值为true,表示允许通配符匹配不到任何索引,例如如下请求:

curl -X GET "localhost:9200/bank3*/_search?q=*&pretty"

实际上,bank3索引是不存在的,但是该请求执行并未报错,如下:

640?wx_fmt=png

这是因为默认是允许通配符匹配不到任何索引的,如果加上 allow_no_indices参数,并将之设置为false,即不允许通配符匹配不到任何索引,此时再去执行就会报错,如下:

curl -X GET "localhost:9200/bank3*/_search?q=*&pretty&allow_no_indices=false"

执行结果如下:

640?wx_fmt=png

如果别名指向关闭索引,则此设置也适用于别名。

expand_wildcards

expand_wildcards表示查询索引的范围,open表示查询所有匹配并open的索引,closed则表示查询所有匹配的索引,如下:

假设bank关闭,bank2未关闭,执行如下查询:

curl -X GET "localhost:9200/bank*/_search?pretty&expand_wildcards=open"

此时,只会展示open的索引信息,如下:

640?wx_fmt=png

而如果执行如下查询:

curl -X GET "localhost:9200/bank*/_search?pretty&expand_wildcards=closed"

结果如下:

640?wx_fmt=png

索引名中的日期数学支持

Date math索引名称解析可以让开发者搜索一系列time-series indices(时间序列索引),而不用搜索所有时间序列索引然后过滤结果或者维护aliases(别名)。这种方式限制了搜索的索引数量并且减少了集群上的负载,并提高了执行性能。例如,如果使用Elasticsearch来记录软件运行日志,如果想要查看过去两天的日志信息,则可以使用date math name模板将搜索索引限制为过去两天。
几乎所有的具有索引参数的API都支持在index parameter value(索引参数值)中包含 date math。date math索引名称采用以下形式 :

<static_name{date_math_expr{date_format|time_zone}}>

上述模版说明:

模版中文含义
static_name索引名称中的静态文本部分
datemathexpr动态计算日期的date math表达式
date_format日期的显示格式,默认为YYYY.MM.dd
time_zone可选的时区,默认为utc

date_math索引名称表达式必须包含在尖括号中,并且所有特殊字符都需要进行URL编码,例如如下请求:

GET /<logstash-{now/d}>/_search

编码后的请求格式为:

curl -X GET "localhost:9200/%3Clogstash-%7Bnow%2Fd%7D%3E/_search" -H 'Content-Type: application/json' -d'	
{	
  "query" : {	
    "match": {	
      "test": "data"	
    }	
  }	
}	
'

编码格式表如下:

字符编码
<%3C
>%3E
/%2F
{%7B
}%7D
|%7C
+%2B
:%3A
,%2C

下面是几个解析案例,供读者参考,设置当前的默认时间为2024年3月22日中午utc。

表达式解析结果
<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

如果想要在索引名称的静态部分使用 {和 },则可以使用 \进行转义,如下:

<elastic\\{ON\\}-{now/M}>

最终结果为:

elastic{ON}-2024.03.01

Demo

例如现在有如下3个过去三天的日志索引:

640?wx_fmt=png

想要查询过去两天的日志索引:

GET /<log-{now/d-1d}>,<log-{now/d}>/_search

查询请求如下:

curl -X GET "localhost:9200/%3Clog-%7Bnow%2Fd-1d%7D%3E%2C%3Clog-%7Bnow%2Fd%7D%3E/_search?pretty" -H 'Content-Type: application/json' -d'	
{	
  "query" : {	
    "match_all": {}	
  }	
}	
'

请求执行结果如下:

640?wx_fmt=png

好了,本文就先介绍到这里,有问题欢迎留言讨论。

640?wx_fmt=png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值