如何查看过去3个月连续两个月发生的事件?
问题描述:
我想写一个查询,可以检测特定人员(由PersonId
标识)是否在过去3个月内连续2个月每月至少访问过一次城市。如何查看过去3个月连续两个月发生的事件?
可以使用Elasticsearch查询语言吗?
我可以统计一个人每个月访问一个城市的次数。但是,我不知道如何计算在过去3个月内连续两个月的访问。
GET visits/_search?
{
"size":0,
"query": {
"bool": {
"must": [
{ "match": {
"PersonId": "AAA"
}}
]
} },
"aggs": {
"visit_days": {
"terms" : {
"field": "Month"
}
}
}
}
除了Month
(它是一个字符串),我也有Year
和Date
(这是最新型)。
答
如果您可以处理应用程序中日期直方图的解析逻辑,那可能是最佳方案。
这里是你如何就至少得拿到水桶该信息的示例:
GET visits/_search
{
"size": 0,
"query": {
"bool": {
"filter": {
"range": {
"visit_days": {
"gte": "now-3M"
}
}
}
}
},
"aggs": {
"histo": {
"date_histogram": {
"field": "visit_days",
"interval": "month"
}
}
}
}
和示例输出:
{
"key_as_string": "2017-08-01T00:00:00.000Z",
"key": 1501545600000,
"doc_count": 1
},
{
"key_as_string": "2017-09-01T00:00:00.000Z",
"key": 1504224000000,
"doc_count": 0
},
{
"key_as_string": "2017-10-01T00:00:00.000Z",
"key": 1506816000000,
"doc_count": 1
}
然后,以满足您的要求,解析响应,并做一些简单的事情,比如检查第二个到上个月的计数为0(假定3个月的限制是静态的)。