【发布时间】:2019-08-22 22:19:04
【问题描述】:
我正在努力整理一个查询,并且可以使用一些帮助。文档很简单,只记录一个用户的登录时间
{
"timestamp":"2019-01-01 13:14:15",
"username":"theuser"
}
我想根据今天的偏移量使用以下规则进行计数,例如 10 天前。
- 任何最近一次登录时间早于 10 天的用户都被计为“非活动用户”
- 任何在 10 天前首次登录的用户都被计为“新用户”
- 其他任何人都被计为“活跃用户”。
我可以使用它来获取每个用户的第一次和最新登录(我发现这也可以通过 top_hits 聚合来完成)
GET mytest/_search?filter_path=**.buckets
{
"aggs" : {
"username_grouping" : {
"terms" : {
"field" : "username"
},
"aggs" : {
"first_login" : {
"min": { "field" : "timestamp" }
},
"latest_login" : {
"max": { "field" : "timestamp" }
}
}
}
}
}
我正在考虑将其用作日期范围聚合的来源,但无法正常工作。
这是否可以在一个查询中实现,如果不能,是否可以在单独的查询中计算“非活动用户”和“新用户”计数?
这里有一些示例数据,假设今天的日期是 2019-08-20 并且偏移量为 10 天,这将为每种类型的用户提供 1 的计数
PUT _template/mytest-index-template
{
"index_patterns": [ "mytest" ],
"mappings": {
"properties": {
"timestamp": { "type": "date", "format": "yyyy-MM-dd HH:mm:ss" },
"username": { "type": "keyword" }
}
}
}
POST /mytest/_bulk
{"index":{}}
{"timestamp":"2019-01-01 13:14:15","username":"olduser"}
{"index":{}}
{"timestamp":"2019-01-20 18:55:05","username":"olduser"}
{"index":{}}
{"timestamp":"2019-01-31 09:33:19","username":"olduser"}
{"index":{}}
{"timestamp":"2019-08-16 08:02:43","username":"newuser"}
{"index":{}}
{"timestamp":"2019-08-18 07:31:34","username":"newuser"}
{"index":{}}
{"timestamp":"2019-03-01 09:02:54","username":"activeuser"}
{"index":{}}
{"timestamp":"2019-08-14 07:34:22","username":"activeuser"}
{"index":{}}
{"timestamp":"2019-08-19 06:09:08","username":"activeuser"}
提前致谢。
【问题讨论】:
标签: elasticsearch