Ваша агрегация неверна, так как вы получаете самые высокие попадания для каждого x
и time
, в то время как ваша цель - получить последнее попадание для каждого x
. Вам нужно изменить свой запрос, как показано ниже, то есть вы агрегируете только по x
, а в вашей субагрегации top_hits
вы сортируете документы, уменьшая time
и берете только последний.
{
"size": 0,
"aggs": {
"group_by": {
"terms": {
"field": "x"
},
"aggs": {
"resource": {
"top_hits": {
"from": 0,
"size": 1,
"sort": {
"time": "desc"
},
"_source": {}
}
}
}
}
}
}
Документы, которые вы ищете, находятся в разделе resource.hits.hits
каждого из ваших ведер:
"aggregations" : {
"group_by" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "1",
"doc_count" : 2,
"resource" : {
"hits" : {
"total" : 2,
"max_score" : null,
"hits" : [
{
"_index" : "times",
"_type" : "doc",
"_id" : "PZt7G2cBJos57mIu0oy-",
"_score" : null,
"_source" : {
"x" : "1",
"time" : 1536574915
},
"sort" : [
1536574915
]
}
]
}
}
},
{
"key" : "2",
"doc_count" : 2,
"resource" : {
"hits" : {
"total" : 2,
"max_score" : null,
"hits" : [
{
"_index" : "times",
"_type" : "doc",
"_id" : "Ppt7G2cBJos57mIu0oy-",
"_score" : null,
"_source" : {
"x" : "2",
"time" : 1536574919
},
"sort" : [
1536574919
]
}
]
}
}
},
{
"key" : "3",
"doc_count" : 1,
"resource" : {
"hits" : {
"total" : 1,
"max_score" : null,
"hits" : [
{
"_index" : "times",
"_type" : "doc",
"_id" : "QZt7G2cBJos57mIu0oy-",
"_score" : null,
"_source" : {
"x" : "3",
"time" : 1536574915
},
"sort" : [
1536574915
]
}
]
}
}
},
{
"key" : "4",
"doc_count" : 1,
"resource" : {
"hits" : {
"total" : 1,
"max_score" : null,
"hits" : [
{
"_index" : "times",
"_type" : "doc",
"_id" : "Qpt7G2cBJos57mIu0oy-",
"_score" : null,
"_source" : {
"x" : "4",
"time" : 1536574915
},
"sort" : [
1536574915
]
}
]
}
}
}
]
}
}