目录
- 介绍
- 例子
- range 的顶级参数
- field的二级参数
- range的限制
- 日期的range的用法
- 日期的计算表达式
- 例子
- 日期字段的参数gt、gte、lt、lte的舍入规则
介绍
返回包含给定范围内术语的文档。
例子
以下搜索返回年龄字段包含 10 到 20 之间的术语的文档。
GET /_search
{
"query": {
"range": {
"age": {
"gte": 10,
"lte": 20,
"boost": 2.0
}
}
}
}
range 的顶级参数
<field> (Required, object) 你希望查询的字段
field的二级参数
参数名 | 描述 |
gt | (可选)大于。 |
gte | (可选)大于等于 |
lt | (可选)小于 |
lte | (可选)小于等于 |
format | (可选,字符串)用于转换查询中日期值的日期格式。默认情况下,Elasticsearch 使用 映射中提供的日期格式。此值会覆盖该映射格式。 |
relation | (可选,字符串)指示范围查询如何匹配范围字段的值。有效值为:INTERSECTS (默认), 匹配具有与查询范围相交的范围字段值的文档。 CONTAINS,匹配具有完全包含查询范围的范围字段值的文档。WITHIN,匹配具有完全在查询范围内的范围字段值的文档。 |
time_zone | (可选,字符串)用于将查询中的日期值转换为 UTC 的偏移量或 IANA 时区。有效值为 ISO 8601 UTC 偏移量,例如 +01:00 或 -08:00,以及 IANA 时区 ID,例如 America/Los_Angeles。 |
boost | (Optional, float) 用于降低或提高查询相关性得分的浮点数。默认为1.0。 |
range的限制
如果 search.allow_expensive_queries 设置为 false,则不会执行对文本或关键字字段的范围查询。
日期的range的用法
当 参数是日期字段数据类型时,您可以将日期运算表达式与以下参数一起使用:
gt
gte
lt
lte
例如,以下搜索返回 timestamp 字段包含今天和昨天之间日期的文档。
GET /_search
{
"query": {
"range": {
"timestamp": {
"gte": "now-1d/d",
"lt": "now/d"
}
}
}
}
注意:
对于range查询和 date range aggregations聚合,Elasticsearch 将缺失的日期部分替换为以下值。缺少年份的部分不会被替换。
MONTH_OF_YEAR: 01
DAY_OF_MONTH: 01
HOUR_OF_DAY: 23
MINUTE_OF_HOUR: 59
SECOND_OF_MINUTE: 59
NANO_OF_SECOND: 999_999_999
例如,格式为yyyy-MM, elasticSearch会将gt的值 2099-12 转换为 2099-12-01T23:59:59.999_999_999Z。这个时间值指定了年和月,但是未指定的其他时间部分,使用了上面的表中的默认值,即:day (01), hour (23), minute (59), second (59), and nanosecond (999_999_999).
数字类型的value值
当未指定日期格式并且range查询针对日期字段时,数字类型的值被解释为表示milliseconds-since-the-epoch以来的时间(1970-01-01到现在的毫秒)。如果您希望该值代表一年,例如2020,您需要将其作为字符串值(例如“2020”)传递,该值将根据默认格式或设置格式进行解析。
日期的计算表达式
表达式以一个给定日期开始,可以是now,也可以是以 || 结尾的日期字符串。此给定日期可以选择后跟一个或多个数学表达式:
- +1h: 加一个小时
- -1d: 减一天
- /d: 向下舍入到最近的一天
支持的单位有:
单位 | 描述 |
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 | now以毫秒为单位加一小时. 解析为: 2001-01-01 13:00:00 |
now-1h | now以毫秒为单位减一小时. 解析为: 2001-01-01 11:00:00 |
now-1h/d | now以毫秒为单位减一小时,向下舍入到天, 解析为: 2001-01-01 00:00:00 |
2001.02.01||+1M/d | 2001-02-01以毫秒为单位加一个月,向下舍入到天, 解析为: 2001-03-01 00:00:00 |
日期字段的参数gt、gte、lt、lte的舍入规则
gt
向上舍入,舍入到日期未涵盖的第一毫秒。
例如, 2014-11-18||/M 向上舍入到 2014-12-01T00:00:00.000, 不包括整个 11 月.
gte
向下舍入到第一个毫秒。.
例如, 2014-11-18||/M 向下舍入到 2014-11-01T00:00:00.000, 包括整个月.
lt
向下舍入到舍入值之前的最后一毫秒。
例如, 2014-11-18||/M 向下舍入到 2014-10-31T23:59:59.999, 不包括整个 11 月。
lte
在舍入区间内,向上舍入到最晚毫秒。.
例如,2014-11-18||/M 向上舍入为 2014-11-30T23:59:59.999,包括整个月份。