Существует индекс, подобный приведенному ниже
{
"createtime" : 1562848788805,
"post" : "director",
"personId" : 30056764807,
"comId" : 20034856551
}
, а personId и comId уникальны, теперь нужно получить последние три comId на человека, как
select 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
}
, но найти немного громоздким.Могли ли вы напрямую получить последние комментарии от каждого человека?Можно ли напрямую отсортировать по времени создания (потому что 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
}
}
]
}
},