【问题标题】:How to check that the events happened during 2 consecutive months in last 3 months?如何检查过去 3 个月内连续 2 个月发生的事件?
【发布时间】:2018-03-24 20:43:54
【问题描述】:

我想编写一个查询来检测特定人(由PersonId 标识)在过去 3 个月的连续 2 个月中每月是否至少访问过一个城市。

是否可以使用 Elasticsearch 查询语言?

我可以计算一个人每月访问一个城市的次数。但是,我不知道如何计算连续 2 个月内最近 3 个月的访问次数。

GET visits/_search?
{
 "size":0,
"query": {
    "bool": {
      "must": [
        { "match": {
          "PersonId": "AAA"
        }}
      ]
    } },
   "aggs": {
    "visit_days": {
     "terms" : {
      "field": "Month"
     }
    }
   }
}

除了Month(它是一个字符串),我还有YearDate(这是日期类型)。

【问题讨论】:

    标签: elasticsearch lucene elasticsearch-5


    【解决方案1】:

    如果您可以在应用程序中处理解析日期直方图的逻辑,那可能是最好的方案。

    这是一个示例,说明如何至少获取该信息的存储桶:

    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
        }
    

    然后为了满足您的要求,解析该响应并执行一些简单的操作,例如检查第 2 个月到上个月的计数是否为 0(假设 3 个月的限制是静态的)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-03
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      相关资源
      最近更新 更多