如何在过滤掉某些值的 ElasticSearch 中应用 post 过滤器?

How to apply post filter in ElasticSearch that filters out certain values?

我想过滤扩展统计信息聚合返回的统计信息。我基本上需要过滤掉 avg 为 0.

的所有值

下面是一个示例查询,我需要在其中过滤这些值。我想我应该申请 post_filter。但是,当我想过滤掉特定值时,我不确定应该如何应用 post 过滤器。你能帮忙吗?

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

您可以使用 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"
          }
        }
      }
    }
  }
}