弹性如何按另一列排序的不同列获取行



在我的弹性索引中,我有三个字段userIdstatusupdatedAt和其他字段。现在我正在尝试获取userIdstatus不同的所有行。我可以通过术语攻击来做到这一点。

但我有另一个要求,当多行具有相同的userIdstatus时,我想返回具有最小/最早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"}
}
}
}
}
}
}
}
}

最新更新