日期之间的弹性搜索计数

Elastic Search count between dates

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

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

  1. start_date
  2. end_date
  3. created_at

我想按月获取我数据库中的人数 --> 具有 x 轴日期直方图和 y 轴计数的折线图达到了目的。

现在我想知道每个月的活跃人数。活跃人员是当前日期介于开始日期和结束日期之间的人员。我似乎不知道如何在这里进行并应用适当的过滤器

Kibana 可以吗?


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

正确的做法是在您的文档中创建一个额外的 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"
   ]
}

如果您这样做,您将能够通过在 activity_period 日期数组字段上配置 date_histogram 聚合来在 Kibana 中执行您需要的可视化。