Elasticsearch 聚合返回多个字段

标签 elasticsearch

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

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

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

我们可以在 Elasticsearch 中实现这一点吗?

谢谢。

最佳答案

是的,需要按Key1进行聚合,然后为Key2Key3添加两个子聚合,最后添加一个metric子-每个 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"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

关于Elasticsearch 聚合返回多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49523402/

相关文章:

c# - 设置安全性后使用C#访问elasticsearch

java - Elasticsearch安装

elasticsearch - 卡夫卡融合云ElasticsearchSink Connector:索引中的映射冲突

amazon-web-services - Amazon elasticsearch 对 FreeStorageSpace 指标的解释

Elasticsearch query_string 完全匹配

elasticsearch - Kibana 使用列表中的查询创建多个图表

elasticsearch - Elasticsearch-术语为空?

java - Elasticsearch Painless 脚本,用于基于日期差异的平均聚合,其中日期之一来自参数映射

elasticsearch - 查询构建器在Elastic Search JAVA高级重置客户端中找不到匹配项

python - 如何使用python在Elasticsearch中将索引修改后的内容复制到另一个内容