16.Elasticsearch 7.15 Query DSL 之 Range查询

介绍

返回包含给定范围内术语的文档。

例子

以下搜索返回年龄字段包含 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: 向下舍入到最近的一天

支持的单位有:

单位描述
yYears
MMonths
wWeeks
dDays
hHours
HHours
mMinutes
sSeconds
例子

假设now是 2001-01-01 12:00:00,请看以下例子:

表达式说明
now+1hnow以毫秒为单位加一小时. 解析为: 2001-01-01 13:00:00
now-1hnow以毫秒为单位减一小时. 解析为: 2001-01-01 11:00:00
now-1h/dnow以毫秒为单位减一小时,向下舍入到天, 解析为: 2001-01-01 00:00:00
2001.02.01||+1M/d2001-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,包括整个月份。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值