如何在ElasticSearch中应用后过滤器以过滤掉某些值?

时间:2019-02-07 10:09:22

标签: elasticsearch elasticsearch-aggregation

我想过滤扩展统计聚合返回的统计。我基本上需要过滤掉avg为0的所有值。

下面是一个示例查询,在这里我需要过滤这些值。我认为我应该应用post_filter。但是,我不确定要过滤出特定值时应如何应用后置过滤器。你能帮忙吗?

    "aggs": {
      "variable_grp": {
        "terms": {
          "field": "variable",
          "size": 200,
          "order": { "stats.avg": "asc" }
        },
        "aggs": {
          "stats": {
            "extended_stats": { "field": "value_num" }
          }
        }
      }
    }, 
    "size":0

1 个答案:

答案 0 :(得分:1)

您可以使用bucket_selector管道聚合来实现所需的目标:

{
  "aggs": {
    "variable_grp": {
      "terms": {
        "field": "variable",
        "size": 200,
        "order": {
          "stats.avg": "asc"
        }
      },
      "aggs": {
        "stats": {
          "extended_stats": {
            "field": "value_num"
          }
        },
        "avg_gt_0": {
          "bucket_selector": {
            "buckets_path": {
              "avgStats": "stats.avg"
            },
            "script": "params.avgStats > 0"
          }
        }
      }
    }
  }
}