Как применить пост-фильтр в ElasticSearch, который отфильтровывает определенные значения? - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу отфильтровать статистику, возвращаемую расширенным агрегированием статистики.В основном мне нужно отфильтровать все значения, где 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 голосов
/ 07 февраля 2019

Вы можете использовать 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"
          }
        }
      }
    }
  }
}
...