首页 > 解决方案 > 如何过滤弹性搜索中的连续天数?

问题描述

这是我的场景,我想找到连续登录我们网站等于或大于 3 天的用户。例如:

{"login_time":"2018-01-01T18:19:07.982Z", "user_id":123}
{"login_time":"2018-01-01T08:30:07.982Z", "user_id":456}
{"login_time":"2018-01-02T09:39:07.982Z", "user_id":123}
{"login_time":"2018-01-03T08:20:07.982Z", "user_id":123}
{"login_time":"2018-01-03T08:20:07.982Z", "user_id":456}

所以,user_id:123 已经连续登录了 3 天,user_id:456 已经连续登录了 1 天,我希望在 Elasticsearch 返回时我可以删除 user_id:456。

这是我的 ES JSON:

GET event-tracking/_search
{
  "aggs": {
    "login_by_day": {
      "date_histogram": {
        "field": "login_time",
        "interval": "day"
      }, 
      "aggs": {
        "user_id": {
          "terms": {
            "field": "user_id",
            "size": 10
          }
        }
      }
    }
  }
}

和回应:

"aggregations": {
    "login_by_day": {
      "buckets": [
        {
          "key_as_string": "2018-01-01T00:00:00.000Z",
          "key": 1514764800000,
          "doc_count": 2,
          "user_id": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
              {
                "key": 123,
                "doc_count": 1
              },
              {
                "key": 456,
                "doc_count": 1
              }
            ]
          }
        },
        {
          "key_as_string": "2018-01-02T00:00:00.000Z",
          "key": 1514851200000,
          "doc_count": 1,
          "user_id": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
              {
                "key": 123,
                "doc_count": 1
              }
            ]
          }
        },
        {
          "key_as_string": "2018-01-03T00:00:00.000Z",
          "key": 1514937600000,
          "doc_count": 2,
          "user_id": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
              {
                "key": 123,
                "doc_count": 1
              },
              {
                "key": 456,
                "doc_count": 1
              }
            ]
          }
        }
      ]
    }
  }

然后,我必须编写一些代码来过滤结果。我的问题是如何在没有任何代码的情况下使用 ES JSON 来访问它。

提前致谢。

标签: elasticsearch

解决方案


推荐阅读