我有弹性搜索和kibana版本7.X
我有一个带有日期字段的文档:
我想按月获取数据库中的人数->用x轴日期直方图和y轴计数的折线图可以解决问题。
现在,我想按月列出活跃人数。活动人员是当前日期在开始日期和结束日期之间的人。我似乎不知道该如何进行并应用适当的过滤器
Kibana可以吗?
我能够通过使用过滤器找到部分解决方案。但是在这里,我手动创建值并对范围进行硬编码。有什么办法可以自动化吗?
答案 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
聚合,并且gte
和lte
日期内的每个时间间隔都将计为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中进行所需的可视化。