ElasticSearch聚合 - 按

时间:2016-05-31 19:06:12

标签: elasticsearch

我是elasticsearch的新手,并尝试执行一个类似于过滤和分组的查询。

我能够过滤(使用过滤器)并使用'terms'按查询执行组,但无法构建同时执行这两项操作的查询。

这是我没有分组的查询

{
  "size": 0,
  "aggs": {
    "group_by_city": {
        "filter": {
            "bool": {
              "must": [
                {
                  "term": {
                    "account": "a"
                  }
                },
                {
                  "term": {
                    "appName": "b"
                  }
                },
                {
                  "range": {
                    "timestamp": {
                      "from": 1464713893304,
                      "to": 1465022700000
                    }
                  }
                }
              ]
            }
          },
      "aggs": {
        "average_timing": {
          "avg": {
            "field": "t.timing1"
          }
        }
      }
    }
  }
}

对于我曾经使用的分组:

{
  "size": 0,
  "aggs": {
    "group_by_country": {
      "terms": {
        "field": "country"
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "t.timing1"
          }
        }
      }
    }
  }
}

任何想法如何将两者结合起来?

1 个答案:

答案 0 :(得分:1)

当我们必须对来自ElasticSearch的数据子集进行一些分析时,我们遇到了类似的问题。我设法通过合并filteraggs来解决这个问题。根据您的疑问,我可以想到这样的事情:

{
    "size": 0,
    "filter": {
        "bool": {
            "must": [
                {
                    "term": { "account": "a" }
                },
                {
                    "term": { "appName": "b" }
                },
                {
                    "range": {
                        "timestamp": {
                            "from": 1464713893304,
                            "to": 1465022700000
                        }
                    }
                }
            ]
        }
    },
    "aggs": {
        "group_by_country": {
            "terms": { "field": "country" },
            "aggs": {
                "average_balance": {
                    "avg": {
                        "field": "t.timing1"
                    }
                }
            }
        }
    }
}

我希望我对你的问题的理解是对的,这对你有帮助。