range 范围查询
range 用 gt / gte / lt / lte 表达数值与日期区间,布尔、字符串、ip 字段同样适用(也可用 from / to 简写)。日期字段支持 now、now-1d/d、2026-01-01||+1M 这类日期数学表达式与取整符号,跨时区查询用 time_zone 对齐口径。不满足字段默认格式时可用 format 指定解析方式,条件放进 filter 子句后不参与评分。
基本信息
| 比较符 | gt / gte / lt / lte,也可写 from / to |
|---|---|
| 日期表达式 | now、now-1d、now/d、2026-01-01||+1M |
| 取整符号 | /d 按天、/h 按小时、/M 按月取整 |
| 时区 | time_zone 参数,未指定按 UTC 计算 |
| 格式 | format 指定日期解析格式 |
| 评分 | 放在 filter 子句时不参与相关性评分 |
典型使用场景
- 价格或评分区间筛选,配合排序做商品列表
- 时间范围检索:最近 7 天、昨天、本月等口径
- 结算类统计:按自然日或自然月圈定数据范围
- 日志查询时先按时间范围收窄,再做聚合
- 库存与数量筛选,排除无货或缺货记录
- 数据保留策略联查:找出超过保留期的文档
示例
示例
GET /products/_search
{
"query": {
"range": { "price": { "gte": 3000, "lte": 8000 } } # 数值闭区间
}
}
GET /logs/_search
{
"query": {
"range": {
"@timestamp": {
"gte": "now-1d/d", # 昨天零点
"lt": "now/d", # 今天零点
"time_zone": "+08:00" # 按东八区口径取整
}
}
}
}日期表达式读法
| 写法 | 含义 | 说明 |
|---|---|---|
| now | 当前时刻 | 未取整,按毫秒计算 |
| now-1d | 24 小时前 | 相对当前时刻 |
| now-1d/d | 昨天的零点 | 先算偏移再按天取整 |
| now/d | 今天零点 | 日界线按 time_zone 决定 |
| now-1h/h | 上一个整点 | 小时级分桶常用 |
| 2026-01-01||+1M | 日期加一个月 | 表达式可叠加运算 |
日期取整符号很关键:now/d 是今天零点,now 是当前时刻;做自然日统计必须带取整符号,否则区间会随查询时间漂移。
默认时区是 UTC,业务按东八区结算时必须显式写 time_zone,否则日界线会相差 8 小时,跨天数据统计出错。
字符串形式的日期若不符合字段声明的 format 会解析失败或无命中;写入前统一格式,或显式指定 format 与字段定义保持一致。