ElasticSearch在结果中的平均聚合

时间:2014-11-14 16:12:52

标签: elasticsearch

我想获得十大销售产品的平均价格,所以我做了以下查询:

{
    "aggs": {
        "top_sale_avg_price": {
            "avg": {"field": "price"},
            "aggs": {
                "top_sale_hits": {
                    "top_hits": {
                        "sort": [{"buy_count": {"order": "desc"}}],
                        "size": 10
                    }
                }
            }
        }
    }
}

然后我收到错误,它说"AggregationInitializationException[Aggregator [top_sale_avg_price] of type [avg] cannot accept sub-aggregations]"

1 个答案:

答案 0 :(得分:0)

Top hits会找到与您的查询最匹配的十个文档(即得分最高)。然后对此结果集执行排序 - 因此热门命中不会为您工作。

你也不能将top_hitsavg嵌套在一起 - 你只能在一个桶内嵌套(例如术语,直方图,范围等)

为了满足您的要求,您可以运行2个查询。 第一个找到匹配的文件(十大销售产品):

{
  "fields" : ["_id"],
  "sort": [
    { "buy_count": { "order": "desc" }}
   ],
  "size":10,
  "query": {
    "match_all": {}
  }
}'

获得平均销售价格的第二个问题 - 您需要填充ID。

{
  "filter" : {
    "ids": {
        "values": [ "07cfbc09-360b-10d8-e053-28ab48a5c296", "07cf438e-7830-19ec-e053-28ab48a59c0b"]}
  },
  "aggs" : {
    "top_sale_avg_price" : {
      "avg": {"field" : "price" }  }
   }
}'