日期之间的弹性搜索计数

时间:2020-06-15 10:35:13

标签: datetime elasticsearch kibana range-query

我有弹性搜索和kibana版本7.X

我有一个带有日期字段的文档:

  1. 开始日期
  2. 结束日期
  3. created_at

我想按月获取数据库中的人数->用x轴日期直方图和y轴计数的折线图可以解决问题。

现在,我想按月列出活跃人数。活动人员是当前日期在开始日期和结束日期之间的人。我似乎不知道该如何进行并应用适当的过滤器

Kibana可以吗?


我能够通过使用过滤器找到部分解决方案。但是在这里,我手动创建值并对范围进行硬编码。有什么办法可以自动化吗?

enter image description here

1 个答案:

答案 0 :(得分:1)

执行此操作的正确方法是在文档中创建一个附加的date_range field(例如,名为activity_period),如下所示:

{
   "user": "user1",
   "start_date": "2020-01-01",
   "end_date": "2020-05-01",
   "activity_period": {
     "gte": "2020-01-01",
     "lte": "2020-05-01"
   }
}

使用新的activity_period字段,您现在可以对其进行date_histogram聚合,并且gtelte日期内的每个时间间隔都将计为1。 >

POST index/_search
{
  "aggs": {
    "histo": {
      "date_histogram": {
        "field": "activity_period",
        "interval": "month"
      }
    }
  }
}

对于每个月度时段,您将获得该月活动的用户数。

唯一的问题是Kibana doesn't support date_histogram on date_range fields还没有。因此,恐怕在此问题解决之前,在Kibana中执行此操作的唯一方法是实际存储用户在阵列中处于活动状态的所有月份,如下所示:

{
   "user": "user1",
   "start_date": "2020-01-01",
   "end_date": "2020-05-01",
   "activity_period": [
     "2020-01-01",
     "2020-02-01",
     "2020-03-01",
     "2020-04-01",
     "2020-05-01"
   ]
}

如果执行此操作,则可以通过在date_histogram日期数组字段上配置activity_period聚合来在Kibana中进行所需的可视化。

相关问题