弹性搜索使用范围聚合,基于术语聚合结果

时间:2019-11-23 12:37:58

标签: elasticsearch aggregation

我的SQL格式问题很简单,但我可以将其转换为弹性聚合格式

假设我想要弹性搜索中引爆查询的结果

SELECT Foo.Type,COUNT(*) FROM Foo GROUP BY Foo.Type HAVING SUM(Foo.Price) > 20 AND SUM(Foo.Price) < 25

elastic中是否有任何聚合组合可以响应这些查询?

重要的是要提到第一组(Foo.Type)的结果大于最大弹性聚集大小(10000)

我的数据是:


ID类型价格

1蓝色10

2蓝色10

3蓝色5

4红色15

我的结果应该是这样的:


蓝色3

如果有人可以帮助我,我将不胜感激。 谢谢

1 个答案:

答案 0 :(得分:0)

您可以按照以下步骤进行操作

{
  "aggs": {
    "byType": {
      "terms": {
        "field": "type"
      },
      "aggs": {
        "price_sum": {
          "sum": {
            "field": "price"
          }
        },
        "price_bucket_filter": {
                    "bucket_selector": {
                        "buckets_path": {
                          "totalPrice": "price_sum"
                        },
                        "script": "params.totalPrice > 20 && params.totalPrice< 25" 
                    }
                }
      }
    }
  }
}