Фильтрация пустых сегментов по результатам агрегации

Итак, мы пытаемся отфильтровать пустые сегменты, извлеченные из ElasticSearch, но безуспешно.

С помощью агрегации мы можем найти: для каждого цвета автомобиля, для каждой временной метки сумму производственных часов.

В последнем разделе мы написали скрипт, который обнаруживает, что агрегация превысила 1000 часов производства.

Оно работает. К сожалению, мы получили пустые сегменты вместо отфильтрованных результатов ниже 1000.

Вот наш запрос:

{
 "size": 0,
 "aggs": {
  "colors": {
   "terms": {
    "field": "color"
    "min_doc_count": 1
   },
   "aggs": {
    "timestamps": {
     "terms": {
      "field": "timestamp",
      "min_doc_count": 1
     },
     "aggs": {
      "sum_manufacturing": {
       "sum": {
        "field": "hours"
       }
      },
      "manufacturing_bucket_filter": {
       "bucket_selector": {
        "buckets_path": {
         "hours": "sum_manufacturing"
        },
        "script": {
         "inline": "hours > 1000",
         "lang": "expression"
        }
       }
      }
     }
    }
   }
  }
 }
}

Вы заметите, что мы добавили min_doc_count здесь и там, но это не сработает.

Вот пустое ведро, полученное в результате:

{
  "key": "Yellow",
  "doc_count": 336,
  "timestamps": {
    "doc_count_error_upper_bound": 0,
    "sum_other_doc_count": 332,
    "buckets": [

    ]
  }
}

И пустое ведро ООН:

{
  "key": "Blue",
  "doc_count": 336,
  "timestamps": {
    "doc_count_error_upper_bound": 0,
    "sum_other_doc_count": 332,
    "buckets": [
      {
        "key": 1464880946000,
        "key_as_string": "2016-06-02T15:22:26.000Z",
        "doc_count": 4,
        "sum_manufacturing": {
          "value": 1049
        }
      }
    ]
  }
}

Было бы здорово, если бы был способ отфильтровать пустые ведра. Спасибо, любая помощь будет высоко ценится.

1 ответ

{
 "size": 0,
 "aggs": {
  "colors": {
   "terms": {
    "field": "color"
    "min_doc_count": 1
   },
   "aggs": {
    "timestamps": {
     "terms": {
      "field": "timestamp",
      "min_doc_count": 1
     },
     "aggs": {
      "sum_manufacturing": {
       "sum": {
        "field": "hours"
       }
      },
      "manufacturing_bucket_filter": {
       "bucket_selector": {
        "buckets_path": {
         "hours": "sum_manufacturing"
        },
        "script": {
         "inline": "hours > 1000",
         "lang": "expression"
        }
       }
      },
      "min_bucket_selector":{
          "bucket_selector": {
            "buckets_path": {"count": "sum_manufacturing._bucket_count"},
            "script": {"inline": "params.count != 0"}
          }
        }
     }
    }
   }
  }
 }
}

Я думаю, что это может решить вашу проблему.

Другие вопросы по тегам