1. 按时间范围查询
- 场景:查询过去或未来特定时间段内的数据,如最近一周、一个月内的数据等。
- 示例:查询最近一周的数据
{
"query": {
"range": {
"timestamp": {
"gte": "now-1w",
"lt": "now"
}
}
}
}
- 解释:
now
代表当前时间,now-1w
表示当前时间往前推一周。gte
表示大于等于,lt
表示小于。
2. 按时间间隔聚合
- 场景:按一定时间间隔对数据进行分组聚合,比如按天、周、月统计数据量等。
- 示例:按天统计最近一个月内每天的数据量
{
"aggs": {
"daily_data_count": {
"date_histogram": {
"field": "timestamp",
"calendar_interval": "day",
"extended_bounds": {
"min": "now-1M",
"max": "now"
}
}
}
}
}
- 解释:
date_histogram
用于按日期进行直方图聚合,calendar_interval
设置为 day
表示按天聚合,extended_bounds
定义了聚合的时间范围是最近一个月。
3. 动态时间范围过滤
- 场景:根据不同条件动态调整时间范围进行数据过滤。
- 示例:假设索引中有一个表示事件类型的字段
event_type
,对于 type1
事件查询最近 3 天的数据,对于 type2
事件查询最近 7 天的数据
{
"query": {
"bool": {
"filter": [
{
"match": {
"event_type": "type1"
}
},
{
"range": {
"timestamp": {
"gte": "now-3d",
"lt": "now"
}
}
}
]
}
}
}
- 解释:通过
bool
查询结合 match
匹配事件类型,同时利用日期数学格式设置对应的时间范围过滤数据。如果是 type2
事件,将 now-3d
改为 now-7d
即可。