Ввести bucket-selector или любую фильтрацию после агрегации (например, в sql) на карте региона elasti c -search / kibana - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть табличные данные по районам и дням. Каждая строка содержит разницу между текущим и предыдущим днями, то есть относительное значение.

 district |     day    | metric 
----------+------------+--------
 D1       | 2020-04-12 | -11     
 D1       | 2020-04-13 |  40
 D2       | 2020-04-13 |  20     
 D1       | 2020-04-14 |  11         
 D1       | 2020-04-15 | -50

Мне нужно визуализировать эти данные на карте региона Кибаны.

Итак, metri c сгруппировано по район и суммировано. Вот запрос ElasticSearch, сгенерированный Kibana:

{"aggs": {
    "2": {
      "terms": {
        "field": "district",
        "size": 300,
        "order": {
          "1": "desc"
        }},
      "aggs": {
        "1": {
          "sum": {
            "field": "metric"
          }}}}},
  "query": {
    "bool": {
      "must": [{
          "range": {
            "@timestamp": {
              "format": "strict_date_optional_time",
              "gte": "2020-04-12T00:00:00.0Z",
              "lte": "2020-04-16T00:00:00.0Z"
            }}}]}}}  

В зависимости от ярости выбранных данных, результат может отличаться. Например, этот запрос выбирает все данные (см. @Timestamp filter) и значения metri c для округов D1 и D2 будут -10 и 20 . Если я изменю фильтр для выбора данных за 12-13 апреля, это будет -11 + 40 = 29 для D1 и 20 для D2 .

В Кибане мне нужно отфильтровать сегменты с отрицательным значением (metri c) и показать районы только с положительным значением суммы. Я не мог найти никакого рабочего решения. Я пробовал

  • Кибана JSON вход + Агрегация селектора ковшей Визуальный
  • Графики Веги Кибаны, но кажется, что это не поддерживает карты региона. Я бы хотел этого избежать, так как это довольно сложно.
  • Создание нового индекса на основе существующих, но это невозможно, так как в результате это зависит от фильтра диапазона дат, поэтому я не могу предварительно рассчитать показатели и отфильтровывать негативы, потому что я не знаю, какой диапазон дат находится в расширенном режиме

Ничего из этого не сработало для меня. Мне удалось составить рабочий поисковый запрос Elasti c, который выполняет именно то, что я хочу, но я не знаю, как его визуализировать, используя карту региона:

{"aggs": {
    "2": {
      "terms": {
        "field": "district",
        "size": 300,
        "order": {
          "1": "desc"
        }},
      "aggs": {
        "1": {
          "sum": {
            "field": "metric"
          },
          "1_bucket_selector": { -- here is main part, how get it in region map?
            "bucket_selector": {
              "buckets_path": {
                "metricSum": "1"
              },
              "script": "params.metricSum > 0"
            }}}}}}}

Итак, любой обходной путь для достижения что я хочу?

Здесь относится к теме topi c на форуме в Кибане

...