许吉友 - 运维

ES 之 REST APIs

Elasticsearch公开了用户界面组件使用的 REST API,可以直接调用这些 api 来配置和访问 Elasticsearch 的特性。

API 约定

可以在 API 中使用多个索引

可以使用 test1,test2,test3 来查询多个索引,如果查询所有索引,可以使用_all

POST my_index,my_index1/_search
{
  "query": {
    "match_all": {}
  }
}

POST _all/_search
{
  "query": {
    "match_all": {}
  }
}

也可以使用通配符,如: test* or *test or te*t or *test*

还可以使用排除法,如test*,-test3 ,这就代表所有 test开头的,但不包括 test3!

包含多个索引的api还可以加以下参数:

可以在索引中执行日期运算

索引格式,如:

<static_name{date_math_expr{date_format|time_zone}}>

例子:

# 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

例子:

Expression Resolves to
<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}> resolves to elastic{ON}-2024.03.01

全局选项

pretty

当给 API 加上了 ?pretty=true ,则会将结果显示成完整的 JSON 格式。如果设置 ?format=yaml ,则会显示 yaml 格式。

人类可读的输出

设置 ?human=false 会返回人类可读的输出,它的默认值就是 false。

日期计算

日期计算 包括 gte 、 lte 、from 、to 。now 代表现在,可以对 now 进行计算:

字母解释如下:

y Years
M Months
w Weeks
d Days
h Hours
H Hours
m Minutes
s Seconds

输入 2001-01-01 12:00:00, 一些例子:

now+1h now in milliseconds plus one hour. Resolves to: 2001-01-01 13:00:00
now-1h now in milliseconds minus one hour. Resolves to: 2001-01-01 11:00:00
now-1h/d now in milliseconds minus one hour, rounded down to UTC 00:00. Resolves to: 2001-01-01 00:00:00
`2001.02.01\ \ +1M/d` 2001-02-01 in milliseconds plus one month. Resolves to: 2001-03-01 00:00:00

响应过滤

filter_path 可以指定不显示哪些字段。

例子:

GET /_search?q=elasticsearch&filter_path=took,hits.hits._id,hits.hits._score

也可以使用通配符:

GET /_cluster/state?filter_path=metadata.indices.*.stat*

使用符号 - :

GET /_count?filter_path=-_shards

flat_settings

默认为 false。

例子:

GET twitter/_settings?flat_settings=true

结果:
{
  "twitter" : {
    "settings": {
      "index.number_of_replicas": "1",
      "index.number_of_shards": "1",
      "index.creation_date": "1474389951325",
      "index.uuid": "n6gzFZTgS664GUfx0Xrpjw",
      "index.version.created": ...,
      "index.provided_name" : "twitter"
    }
  }
}

GET twitter/_settings?flat_settings=false

结果:
{
  "twitter" : {
    "settings" : {
      "index" : {
        "number_of_replicas": "1",
        "number_of_shards": "1",
        "creation_date": "1474389951325",
        "uuid": "n6gzFZTgS664GUfx0Xrpjw",
        "version": {
          "created": ...
        },
        "provided_name" : "twitter"
      }
    }
  }
}

时间格式

d Days
h Hours
m Minutes
s Seconds
ms Milliseconds
micros Microseconds
nanos Nanoseconds

大小格式

b Bytes
kb Kilobytes
mb Megabytes
gb Gigabytes
tb Terabytes
pb Petabytes

千,百万

k Kilo
m Mega
g Giga
t Tera
p Peta

距离

Mile mi or miles
Yard yd or yards
Feet ft or feet
Inch in or inch
Kilometer km or kilometers
Meter m or meters
Centimeter cm or centimeters
Millimeter mm or millimeters
Nautical mile NM, nmi, or nauticalmiles

fuzziness

0, 1, 2 The maximum allowed Levenshtein Edit Distance (or number of edits)
AUTO Generates an edit distance based on the length of the term. Low and high distance arguments may be optionally provided AUTO:[low],[high]. If not specified, the default values are 3 and 6, equivalent to AUTO:3,6 that make for lengths:0..2Must match exactly3..5One edit allowed>5Two edits allowedAUTO should generally be the preferred value for fuzziness.

error_trace

查看错误堆栈:

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

_cat API

JSON 非常适合计算,但对于人来说,更愿意看到紧凑和对齐的文本,_cat API就是来做这个事情的。

单独请求 _cat 会返回所有命令,对某一个命令加 help 参数,会显示命令的列名。

如果加了参数 v,则会为数据加上列。

h 参数表明要显示的列。

bytes 参数表示单位。

format 参数指定响应格式,- text (default) - json - smile - yaml - cbor。

pretty 参数指定格式是否完美。

s 参数代表排序,例如:s=column1,column2:desc,column3

_cat 子API

_cluster API