一、date_histogram聚合的坑
query: {
bool: {
must: [
{
match_phrase: {day:'20220117'}
}
]
}
},
aggs:{
hours:{
date_histogram: {
field: 'timestamp',
min_doc_count: 0,
interval: 'hour',
format: 'yyyy-MM-dd hh'
},
}
}
如上聚合操作,先匹配day为指定日期的数据,然后按小时聚合,es聚合结果返回很多day不匹配的数据,解决方案:
query: {
bool: {
must: [
{
match_all: {}
}
],
filter: {
range: {
timestamp: {
gte: start,
lte: end
}
}
}
}
},
aggs:{
hours:{
date_histogram: {
field: 'timestamp',
min_doc_count: 0,
interval: 'hour',
format: 'yyyy-MM-dd hh'
},
}
}
将match_phrase修改为filter,然后按时间戳过滤,最后得到正确结果。