Elastic Search 5.6中排序和限制后的聚合

时间:2020-07-01 13:04:56

标签: elasticsearch elasticsearch-dsl

在对结果进行排序并从中选择前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中可以实现这一点吗?

0 个答案:

没有答案