弹性搜索特定时间
elasticsearch specific hours
我正在尝试编写一个查询,该查询只会 return 返回 x 天前当天当前小时的结果。例如,如果现在的时间是 12:00,我想在 14 天前的每一天获得 11:00-12:00 范围内的结果。我看过 Elasticsearch sum total values for specific hours within a month 但它要求我选择固定时间。简单地从 "now" 中提取小时是行不通的,因为返回 1 小时可能会导致移动到昨天,然后范围将不起作用。
您可以使用具有多个应范围过滤器的过滤布尔查询。您可以在代码中计算小时日期范围,并动态构建 X 天数的查询。下面的示例是在 00:30 计算的 3 天(因此跨越了日期边界)
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"should": [
{ "range": {
"myDateField" : {
"gte" : "2015-11-18T23:30:00.00",
"lt" : "2015-11-19T00:30:00.00"
}
}},
{ "range": {
"myDateField" : {
"gte" : "2015-11-17T23:30:00.00",
"lt" : "2015-11-18T00:30:00.00"
}
}},
{ "range": {
"myDateField" : {
"gte" : "2015-11-16T23:30:00.00",
"lt" : "2015-11-17T00:30:00.00"
}
}}
]
}
}
}
}
}
我正在尝试编写一个查询,该查询只会 return 返回 x 天前当天当前小时的结果。例如,如果现在的时间是 12:00,我想在 14 天前的每一天获得 11:00-12:00 范围内的结果。我看过 Elasticsearch sum total values for specific hours within a month 但它要求我选择固定时间。简单地从 "now" 中提取小时是行不通的,因为返回 1 小时可能会导致移动到昨天,然后范围将不起作用。
您可以使用具有多个应范围过滤器的过滤布尔查询。您可以在代码中计算小时日期范围,并动态构建 X 天数的查询。下面的示例是在 00:30 计算的 3 天(因此跨越了日期边界)
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"should": [
{ "range": {
"myDateField" : {
"gte" : "2015-11-18T23:30:00.00",
"lt" : "2015-11-19T00:30:00.00"
}
}},
{ "range": {
"myDateField" : {
"gte" : "2015-11-17T23:30:00.00",
"lt" : "2015-11-18T00:30:00.00"
}
}},
{ "range": {
"myDateField" : {
"gte" : "2015-11-16T23:30:00.00",
"lt" : "2015-11-17T00:30:00.00"
}
}}
]
}
}
}
}
}