在Elasticsearch中,now/d 是一个非常实用的日期数学表达式,它表示将当前时间向一天进行取整,即返回到当天的00:00:00时刻。
基本概念
now/d 的含义是将当前时间四舍五入到最近的一天的起始时间。例如,如果当前时间是2026年1月29日17:59:18,那么 now/d 就表示2026年1月29日00:00:00。
实际应用场景
- 查询当天数据
sql
{
"query": {
"range": {
"timestamp": {
"gte": "now/d",
"lt": "now"
}
}
}
}
- 查询昨天数据
sql
{
"query": {
"range": {
"timestamp": {
"gte": "now-1d/d",
"lt": "now/d"
}
}
}
}
- 查询本周数据
sql
{
"query": {
"range": {
"timestamp": {
"gte": "now/w",
"lt": "now"
}
}
}
}
这可以查询从本周开始到现在的所有数据。
与其他时间表达式的结合
now/d 可以与其他时间表达式组合使用:
now-1d/d:昨天的开始时间
now+1h/d:一小时后的时间取整到天
now-1w/d:一周前时间取整到天
时区考虑
在使用 now/d 时,需要注意时区设置,特别是在处理中国时间时,需要加上8小时的偏移量。
性能优化建议
在进行日期范围查询时,使用 now/d 这样的表达式可以帮助Elasticsearch更好地利用查询缓存。