在我的弹性索引中,我有三个字段userId
、status
、updatedAt
和其他字段。现在我正在尝试获取userId
和status
不同的所有行。我可以通过术语攻击来做到这一点。
但我有另一个要求,当多行具有相同的userId
和status
时,我想返回具有最小/最早updatedAt
字段的行。也就是说,当查找一个不同的行时,它应该按updatedAt
升序排列。
我该怎么做?这是我的尝试
GET user_history/_search
{
"aggs": {
"user": {
"terms": {
"field": "userId"
},
"aggs": {
"status": {
"terms": {
"field": "info.status"
}
}
}
}
}
}
您可以使用top_hits聚合
{
"aggs": {
"user": {
"terms": {
"field": "userId"
},
"aggs": {
"status": {
"terms": {
"field": "status.keyword"
},
"aggs": {
"top_document": {
"top_hits": {
"size": 1,
"sort": {"updatedAt":"desc"}
}
}
}
}
}
}
}
}