0

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

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

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

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

现在我想按月统计活跃人数。活跃人员是当前日期介于开始日期和结束日期之间的人员。我似乎不知道如何在此处继续并应用适当的过滤器

Kibana 可以做到这一点吗?


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

在此处输入图像描述

4

1 回答 1

1

这样做的正确方法是在您的文档中创建一个附加date_range字段(例如 named ),如下所示: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中的每个时间间隔都将计为 1。gtelte

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

对于每个月度存储桶,您将获得当月活跃的用户数。

唯一的问题是 Kibana还不date_histogram支持date_range字段。所以我担心在这个问题得到解决之前,你在 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聚合来在 Kibana 中进行所需的可视化。activity_period

于 2020-06-15T11:06:06.787 回答