内容简介:Elasticsearch REST APIs是用HTTP暴露的,并且是基于JSON的。除非另有说明,否则本章中的约定都可以使用REST API来使用。大多数引用
Elasticsearch REST APIs是用HTTP暴露的,并且是基于JSON的。
除非另有说明,否则本章中的约定都可以使用REST API来使用。
- 多索引
- 索引名称中支持日期数学
- 公用选项
- 基于URL的访问控制
多索引
大多数引用 index
参数的api支持跨多个索引执行,使用简单的 test1,test2,test3
表示法(或 _all
表示所有索引)。
所有多索引API都支持下面的url查询字符串参数:
ignore_unavailable
|
如果指定索引是不可用的,控制是否忽略该索引。包括b不存在的索引和已关闭(closed)的索引,可以指定ture或者false |
|---|---|
allow_no_indices
|
通配符索引表达式没有具体的索引时,控制结果是否失败。可以指定true或false。例如,如果指定通配符表达式 foo*
,并且没有以foo开头的索引可用,请求将失败。当 _all
、 *
或没有指定索引时,此设置也适用。此设置也适用于别名,以防别名指向已关闭(closed)索引。 |
expand_wildcards
|
控制通配符索引表达式可以扩展为何种具体索引。如果指定了 open
,则通配符表达式将扩展为仅打开索引。如果指定了 closed
,则通配符表达式仅扩展到封闭索引。还可以指定这两个值( open
和 closed
)扩展到所有索引。 |
上述参数的默认设置取决于所使用的API。
与多索引API相对的是单索引API,例如DocumentAPI和 alias
API就不支持多索引。
索引名称中支持日期数学
日期数学索引名称解析可以让你搜索一段time-series区间的索引,而不是搜索所有time-series索引并过滤结果或维护别名。限制搜索索引的数量可以减少集群上的负载并提高执行性能。例如,如果在日常日志中搜索错误,可以使用date math name模板将搜索限制在过去两天。
几乎所有具有 index
参数的api都在 index
参数值中支持日期数学。
日期数学索引名称采用以下形式:
<static_name{date_math_expr{date_format|time_zone}}>
复制代码
| static_name是名称的静态文本部分 |
|---|
date_math_expr
是动态日期表达式,用来动态的计算 |
date_format
日期的展现格式,是可选的,默认为 yyyy.MM.dd
。格式应该与 Java-time
兼容 |
time_zone
可选的时区,默认为 utc
|
注意在date_format中使用小写字母vs大写字母。例如:mm表示每小时的分钟,而mm表示一年的月份。同样,hh表示1-12小时范围内的小时与AM/PM相结合,而hh表示0-23 24小时范围内的小时。
注意 date_format
中小写和大写字母的使用。 例如:mm表示分钟,而MM表示一年中的月份。 类似地,hh表示1-12范围内的小时与AM / PM的组合,而HH表示0-23小时范围内的小时。
日期数学表达式与区域时间无关。 因此,除了公历之外,不可能使用任何其他日历。
必须将date math索引名称表达式括在大括号内,并且所有特殊字符都应该是URI编码的。例如:
# 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"
}
}
}
'
复制代码
date math 字符对应的编码
日期的括号,必须使用URI编码,可参照下表:
<
|
%3C
|
|---|---|
>
|
%3E
|
/
|
%2F
|
{
|
%7B
|
}
|
%7D
|
|
|
%7C
|
+
|
%2B
|
:
|
%3A
|
,
|
%2C
|
下面的示例显示了不同形式的日期数学索引名,它们根据当前时间解析的最终索引名是22nd March 2024 noon utc。
| 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}>→elastic{ON}-2024.03.01
以下示例显示搜索请求,该搜索请求搜索过去三天的Logstash索引,假设索引使用默认的Logstash索引名称格式 logstash-yyyy.MM.dd
。
# GET /<logstash-{now/d-2d}>,<logstash-{now/d-1d}>,<logstash-{now/d}>/_search
curl -X GET "localhost:9200/%3Clogstash-%7Bnow%2Fd-2d%7D%3E%2C%3Clogstash-%7Bnow%2Fd-1d%7D%3E%2C%3Clogstash-%7Bnow%2Fd%7D%3E/_search" -H 'Content-Type: application/json' -d'
{
"query" : {
"match": {
"test": "data"
}
}
}
'
复制代码
公用选项
下面所有的选项可以用在所有的API上。
美化的结果
当对请求添加 pretty = true
时,返回的JSON将被格式化(仅用于调试!)。 另一种选择是设置 format = yaml
,这将导致以可读的yaml格式返回结果。
可读的输出
统计以可读的格式(例如 “exists_time”:“1h”
或 “size”:“1kb”
)和计算机(例如 “exists_time_in_millis”:3600000
或 “size_in_bytes”:1024
)返回。 可以通过向查询字符串添加 human = false
来关闭可读取的格式。 当统计结果被监视 工具 使用而不是供人使用时。默认值为false。
日期数学(Date Math)
大多数参数接受一个格式化的日期值,例如在 range
查询的 gt
和 lt
,或者 daterange
聚合中的 from
和 to
表达式以锚定日期开始,可以是 now
,也可以是以 ||
结尾的日期字符串。 此锚定日期可以选择后跟一个或多个数学表达式:
+1h -1d /d
支持的时间单位与持续时间的时间单位支持的时间单位不同。 支持的单位是:
y
|
年 |
|---|---|
M
|
月 |
w
|
周 |
d
|
天 |
h
|
时 |
H
|
时 |
m
|
分 |
s
|
秒 |
假设 now
是 2001-01-01 12:00:00
, 例如:
now+1h
|
now
以毫秒为单位上加一小时. 结果是: 2001-01-01 13:00:00
|
|---|---|
now-1h
|
now
以毫秒为单位减去一小时. 结果是: 2001-01-01 11:00:00
|
now-1h/d
|
now
以毫秒为单位减去1小时, 四舍五入到UTC 00:00.结果为: 2001-01-01 00:00:00
|
2001.02.01\|\|+1M/d
|
2001-02-01
以毫秒为单位加一个月. 结果为: 2001-03-01 00:00:00
|
响应过滤
所有的REST API都可以接受 filter_path
参数,可以用来减少响应的返回,此参数采用逗号分隔的过滤器列表,用点表示法表示:
curl -X GET "localhost:9200/_search?q=elasticsearch&filter_path=took,hits.hits._id,hits.hits._score" 复制代码
响应结果:
{
"took" : 3,
"hits" : {
"hits" : [
{
"_id" : "0",
"_score" : 1.6375021
}
]
}
}
复制代码
它还支持*通配符匹配任何字段或字段名称的一部分:
curl -X GET "localhost:9200/_cluster/state?filter_path=metadata.indices.*.stat*" 复制代码
响应结果:
{
"metadata" : {
"indices" : {
"twitter": {"state": "open"}
}
}
}
复制代码
并且**通配符可用于包括字段而不知道字段的确切路径。 例如,我们可以使用此请求返回每个片的Lucene版本:
curl -X GET "localhost:9200/_cluster/state?filter_path=routing_table.indices.**.state" 复制代码
响应结果:
{
"routing_table": {
"indices": {
"twitter": {
"shards": {
"0": [{"state": "STARTED"}, {"state": "UNASSIGNED"}]
}
}
}
}
}
复制代码
也可以通过在过滤器前面添加 -
来排除一个或多个字段
curl -X GET "localhost:9200/_count?filter_path=-_shards" 复制代码
响应结果:
{
"count" : 5
}
复制代码
并且为了进行更多控制,可以将包含和排他过滤器组合在同一表达式中。 在这种情况下,将首先应用独占过滤器,并使用包含过滤器再次过滤结果:
curl -X GET "localhost:9200/_cluster/state?filter_path=metadata.indices.*.state,-metadata.indices.logstash-*" 复制代码
响应结果:
{
"metadata" : {
"indices" : {
"index-1" : {"state" : "open"},
"index-2" : {"state" : "open"},
"index-3" : {"state" : "open"}
}
}
}
复制代码
注意,Elasticsearch有时会直接返回字段的原始值,像 _source
字段,如果你想过滤 _source
字段,您应该考虑将已经存在的 _source
参数与 filter_path
参数组合起来,如下所示:
curl -X POST "localhost:9200/library/book?refresh" -H 'Content-Type: application/json' -d'
{"title": "Book #1", "rating": 200.1}
'
curl -X POST "localhost:9200/library/book?refresh" -H 'Content-Type: application/json' -d'
{"title": "Book #2", "rating": 1.7}
'
curl -X POST "localhost:9200/library/book?refresh" -H 'Content-Type: application/json' -d'
{"title": "Book #3", "rating": 0.1}
'
curl -X GET "localhost:9200/_search?filter_path=hits.hits._source&_source=title&sort=rating:desc"
复制代码
{
"hits" : {
"hits" : [ {
"_source":{"title":"Book #1"}
}, {
"_source":{"title":"Book #2"}
}, {
"_source":{"title":"Book #3"}
} ]
}
}
复制代码
Flat设置
flat_settings标志会影响设置列表的呈现。 当flat_settings标志为true时,将以如下格式返回设置:
curl -X GET "localhost:9200/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"
}
}
}
复制代码
flat_settings
默认值为 false
.
参数
REST参数(使用HTTP时,映射到HTTP URL参数)遵循使用下划线框的约定。
布尔值
所有的REST API参数(请求参数和JSON主体)都支持提供布尔值“false”作为值 false
,布尔值“true”作为值 true
。 所有其他值都会引发错误。
数值
所有REST api都支持以字符串的形式提供参数(这个字符串必须符合数字格式,例如不能是 12a
)。
时间单位
当需要指定持续时间时,例如对于超时参数,持续时间必须指定单位,比如 2d
,持续2天。支持单位包括:
d
|
天 |
|---|---|
h
|
时 |
m
|
分 |
s
|
秒 |
ms
|
毫秒 |
micros
|
微秒 |
nanos
|
纳秒 |
字节大小单位
每当需要指定数据的字节大小时,例如, 设置缓冲区大小参数时,该值必须指定单位,如10千字节为10千字节。 请注意,这些单位使用1024的幂,因此1kb表示1024字节。 支持的单位是:
b
|
Bytes |
|---|---|
kb
|
Kilobytes |
mb
|
Megabytes |
gb
|
Gigabytes |
tb
|
Terabytes |
pb
|
Petabytes |
无单位数量
无单位数量意味着它们没有“单位”,如“字节”、“赫兹”、“米”或“吨”。
如果这些量中有一个很大,我们将打印出来,比如10m(10,000,000)或7k(7000)。当我们的意思是87时,我们仍然会打印87。这些是支持的乘数:
k
|
Kilo |
|---|---|
m
|
Mega |
g
|
Giga |
t
|
Tera |
p
|
Peta |
距离单位
在需要指定距离的地方,比如地理距离查询中的距离参数,如果没有指定距离,默认单位是米。距离可以用其他单位表示,如“1km”或“2mi”(2英里)。
| 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
(纳米) |
模糊
一些查询和api支持使用模糊参数进行模糊匹配。
当查询 text
或 keyword
字段时,模糊性被解释为Levenshtein编辑距离——需要对一个字符串进行的字符数更改,以使其与另一个字符串相同。
fuzziness
可以被指定为:
0
, 1
, 2
|
最大允许的 Levenshtein Edit Distance (或者编辑数) |
|---|---|
AUTO
|
根据术语的长度生成编辑距离。 可选择提供低距离和高距离参数 AUTO:[low],[high]
。 如果未指定,则默认值为3和6,相当于 AUTO:3,6
表示长度: 0..2 必须完全匹配 3..5 允许一次编辑 >5 允许两次编辑 AUTO通常应该是模糊的首选值。 |
启用堆栈跟踪
当请求时返回一个错误,默认情况下,Elasticsearch不会包含错误的堆栈跟踪。你可以通过设置 error_trace
url参数为 true
l来启用堆栈跟踪,例如:默认的,当你发送一个无效的 size
给 _search
API:
curl -X POST "localhost:9200/twitter/_search?size=surprise_me" 复制代码
相应结果如下:
{
"error" : {
"root_cause" : [
{
"type" : "illegal_argument_exception",
"reason" : "Failed to parse int parameter [size] with value [surprise_me]"
}
],
"type" : "illegal_argument_exception",
"reason" : "Failed to parse int parameter [size] with value [surprise_me]",
"caused_by" : {
"type" : "number_format_exception",
"reason" : "For input string: \"surprise_me\""
}
},
"status" : 400
}
复制代码
如果你设置 error_trace=true
curl -X POST "localhost:9200/twitter/_search?size=surprise_me&error_trace=true" 复制代码
相应结果如下:
{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "Failed to parse int parameter [size] with value [surprise_me]",
"stack_trace": "Failed to parse int parameter [size] with value [surprise_me]]; nested: IllegalArgumentException..."
}
],
"type": "illegal_argument_exception",
"reason": "Failed to parse int parameter [size] with value [surprise_me]",
"stack_trace": "java.lang.IllegalArgumentException: Failed to parse int parameter [size] with value [surprise_me]\n at org.elasticsearch.rest.RestRequest.paramAsInt(RestRequest.java:175)...",
"caused_by": {
"type": "number_format_exception",
"reason": "For input string: \"surprise_me\"",
"stack_trace": "java.lang.NumberFormatException: For input string: \"surprise_me\"\n at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)..."
}
},
"status": 400
}
复制代码
请求体在查询字符串中
对于不接受非post请求的请求体的库,可以将请求体作为 source
查询字符串参数传递。当使用此方法时, source_content_type
参数还应该与指示源格式的媒体类型一起传递,例如 application/json
。
Content-Type要求
必须使用Content-Type请求头指定请求体中发送的内容类型。Content-type的值必须是API支持格式之一。大多数api支持JSON、YAML、CBOR和SMILE。批量和多搜索api支持NDJSON、JSON和SMILE;其他类型将导致错误响应。
或者,当我们使用 source
查询字符串参数,必须使用 source_content_type
指定Content-Type。
基于URL的访问控制
许多用户使用基于url的访问控制代理来确保对Elasticsearch索引的访问。对于多搜索、多获取和批量请求,用户可以选择在URL中指定索引,也可以选择在请求体中指定每个请求的索引。
要防止用户覆盖URL中指定的索引,请将此设置添加到elasticsearch.yml文件中:
rest.action.multi.allow_explicit_index: false 复制代码
默认值为 true
,但是当你设置为 false
,Elasticsearch将拒绝在请求体中指定显式索引的请求。
以上所述就是小编给大家介绍的《Elasticsearch7.1中文文档-第四章-API约定》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- MySQL™ 参考手册(语法约定)
- 约定式路由的菜单数据生成方案
- Javascript中的编码约定:在括号之间使用空格
- 数仓的元数据管理和上下游约定
- 前端小纠结--约定式提交和自动生成`changelog`
- iOS高级调试&逆向技术-汇编寄存器调用约定教程
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Blockchain Basics
Daniel Drescher / Apress / 2017-3-16 / USD 20.99
In 25 concise steps, you will learn the basics of blockchain technology. No mathematical formulas, program code, or computer science jargon are used. No previous knowledge in computer science, mathema......一起来看看 《Blockchain Basics》 这本书的介绍吧!