Elasticsearch聚合返回多个字段

3

这个问题不是如何通过多个字段进行聚合,我们可以使用子聚合来实现。

如果您了解SQL,我可以给您一个完美的解释:

SELECT SUM(SomeField1), MAX(SomeField2), MIN(SomeField3), AVG(SomeField4) FROM FooTable
GROUP BY Key1, Key2, Key3

可以在Elasticsearch中实现吗?
谢谢。
1个回答

8

是的,你需要按照Key1进行聚合,然后为Key2Key3添加两个子聚合,最后根据SomeField*每个指标添加一个子度量聚合,基本上就像这样:

{
  "size": 0,
  "aggs": {
    "key1": {
      "terms": {
        "field": "Key1"
      },
      "aggs": {
        "key2": {
          "terms": {
            "field": "Key2"
          },
          "aggs": {
            "key3": {
              "terms": {
                "field": "Key3"
              },
              "aggs": {
                "somefield1": {
                  "sum": {
                    "field": "SomeField1"
                  }
                },
                "somefield2": {
                  "max": {
                    "field": "SomeField2"
                  }
                },
                "somefield3": {
                  "min": {
                    "field": "SomeField3"
                  }
                },
                "somefield4": {
                  "avg": {
                    "field": "SomeField4"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

先生,您是个天才。 - unruledboy
1
谢谢!但是那是多么丑陋、难以阅读的语法啊... - kpollock
@kpollock 习惯问题...一些复杂的SQL查询也很糟糕。 - Val

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接