我有一个带有两个字段的Elasticsearch索引“会话”:
"user_id" : {
"type" : "keyword"
},
"login_at" : {
"type" : "date"
}
每次用户登录时,都会使用user_id和当前时间戳创建一条新记录。
我想列出所有一周未登录的用户。我知道如何使用以下方法获取每个用户的上次登录时间:
GET sessions/_search
{
"size": 0,
"aggs": {
"user_aggs": {
"terms": {
"field": "user_id",
"order": {
"last_access": "asc"
}
},
"aggs": {
"last_access": {
"max": {
"field": "login_at"
}
}
}
}
}
}
上面的查询列出了所有用户及其上次登录时间。
如何将“ last_access”字段过滤为小于now-7d的值?
答案 0 :(得分:1)
好的,我能够解决这个问题。这是查询:
GET sessions/_search
{
"size": 0,
"aggs": {
"user_aggs": {
"terms": {
"field": "user_id",
"size": 1000,
"order": {
"last_access": "asc"
}
},
"aggs": {
"last_access": {
"max": {
"field": "login_at"
}
},
"users_filtered": {
"bucket_selector": {
"buckets_path": {
"key": "last_access"
},
"script": "params.key < a_timestamp"
}
}
}
}
}
}
必须从应用程序发送a_timestamp变量,但这没关系。