下面有一个索引
{
"createtime" : 1562848788805,
"post" : "director",
"personId" : 30056764807,
"comId" : 20034856551
}
并且personId和comId是唯一的,现在想像
一样获得每人最新的三个comIdselect person_id,com_id from t where person_id = 1 order by createtime desc limit 3
union all
select person_id,com_id from t where person_id = 2 order by createtime desc limit 3
union all
select person_id,com_id from t where person_id = 3 order by createtime desc limit 3
现在通过下面的搜索查询来实现此要求
{
"query": {
"terms": { "personId": [1, 2, 3] }
},
"aggs": {
"group_by_personId": {
"terms": {
"field": "personId",
"size": 3
},
"aggs": {
"group_by_comId": {
"terms": {
"field": "comId",
"size": 3,
"order": {
"max_createtime": "desc"
}
},
"aggs": {
"max_createtime": { "max": { "field": "createtime" } }
}
}
}
}
},
"size": 0
}
但是有点麻烦。可以直接获取每个人的最新comId吗?是否可以直接按createtime排序(因为personId和comId是唯一的)?可以从搜索结果中忽略max_createtime和doc_count吗?
"group_by_personId" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : 1,
"doc_count" : 30,
"group_by_comId" : {
"doc_count_error_upper_bound" : -1,
"sum_other_doc_count" : 27,
"buckets" : [
{
"key" : 734,
"doc_count" : 1,
"max_createtime" : {
"value" : 1.569316485853E12
}
},
{
"key" : 674,
"doc_count" : 1,
"max_createtime" : {
"value" : 1.562921481772E12
}
},
{
"key" : 017,
"doc_count" : 1,
"max_createtime" : {
"value" : 1.562851602206E12
}
}
]
}
},