Фильтрация пустых сегментов по результатам агрегации
Итак, мы пытаемся отфильтровать пустые сегменты, извлеченные из 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"}
}
}
}
}
}
}
}
}
Я думаю, что это может решить вашу проблему.