面试题答案
一键面试实现思路
- 首先,使用
terms
聚合按照user_id
进行分组。 - 然后,在每个分组内,使用
top_hits
子聚合来获取每个用户最近一次访问的记录。top_hits
聚合可以按照timestamp
字段降序排序,然后只取第一条记录,这样就能得到每个用户最近一次访问的信息。 - 最后,对结果按照
user_id
进行排序。
聚合DSL语句
{
"size": 0,
"aggs": {
"by_user": {
"terms": {
"field": "user_id",
"order": {
"_key": "asc"
}
},
"aggs": {
"latest_visit": {
"top_hits": {
"sort": [
{
"timestamp": {
"order": "desc"
}
}
],
"_source": {
"includes": ["user_id", "timestamp", "page"]
},
"size": 1
}
}
}
}
}
}