在对结果进行排序并从中选择前n个之后,我必须对Elasticsearch文档进行汇总。 我尝试这样做:
{
"size":1,
"query":{
"bool":{
"must":[
{
"terms":{
"name.keyword":[
"some_name"
]
}
},
{
"exists":{
"field":"3g_duration_count"
}
}
]
}
},
"sort":[
{
"tmst":{
"order":"desc"
}
}
],
"aggs":{
"fieldNameAgg":{
"avg":{
"field":"3g_duration_count"
}
}
}
}
这里汇总后发生了前n个结果的获取(这没有意义),我想根据排序标准选择前n个记录,然后应用汇总。我该如何实现?
我正在使用Elasticsearch 5.6
。
有没有一种方法可以将内部查询的结果以及sort和limit子句分配给子查询,然后在该查询之上应用avg聚合器?这样,我可以确保在聚合发生之前应用限制。
等效的sql查询可能看起来像这样:
select avg(field_value) from (select field_value from t1 order by tmst desc fetch first n rows ) t2
在ElasticSearch 5.6中可以实现这一点吗?