【问题标题】:Create different sub-aggregations depending on a top-level filters aggregation根据顶级过滤器聚合创建不同的子聚合
【发布时间】:2020-07-29 23:24:57
【问题描述】:

我正在使用带有 ElasticSearch 的过滤器聚合,在该聚合中,我想知道是否可以根据不同的过滤器存储桶创建不同的子聚合。就我而言,我从两个来源进行汇总 chromeelectron。对于每个来源,我想运行不同的子聚合。以下是我当前的聚合哈希:

aggs: {
  **top_level_agg,
  sources: {
    filters: {
      filters: {
        chrome: { term: { source: TrackingEvent::CHROME_SOURCE } },
        electron: { term: { source: TrackingEvent::ELECTRON_SOURCE } }
      }
    },
    aggs: {
      **chrome_specific_agg,
      **electron_specific_agg
    }
  }
}

这可行但并不理想,因为铬和电子过滤器 aggs 结果都包含铬特定和电子特定的 aggs。如果我能做这样的事情会更好(我知道这不起作用):

aggs: {
  **top_level_agg,
  sources: {
    filters: {
      filters: {
        chrome: { 
          term: { source: TrackingEvent::CHROME_SOURCE },
          aggs: {
            **chrome_specific_agg
          }
        },
        electron: { 
          term: { source: TrackingEvent::ELECTRON_SOURCE },
          aggs: {
            **electron_specific_agg
          } 
        }
      }
    }
  }
}

我不确定 ES 是否可以做到这一点,但我想我会问。关于如何完成这项工作的任何想法?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    当然可以。只需稍微调整一下嵌套:

    {
      "aggs": {
        "top_level_agg": {},
        "chrome_specific_agg_name": {
          "filter": {
            "term": {
              "source": "TrackingEvent::CHROME_SOURCE"
            }
          },
          "aggs": {
            "chrome_specific_agg": {}
        },
        "electron_specific_agg_name": {
          "filter": {
            "term": {
              "source": "TrackingEvent::ELECTRON_SOURCE"
            }
          },
          "aggs": {
            "electron_specific_agg": {}
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-27
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      • 2015-09-17
      • 2014-02-02
      • 2017-03-09
      相关资源
      最近更新 更多