У меня есть индекс, называемый «события», где каждый документ является отдельным событием.
События генерируются устройствами, которые имеют внутренние идентификаторы.
Я хочу сгруппировать события по «deviceId», а затем агрегировать их по количеству сгенерированных ими событий.
Контейнеры могут быть "0-10", если конкретное устройство генерирует от 0 до 10 событий (документов), и "10-100", "100-1000", "1000+" соответственно.
Кажется, мне нужны "конвейерные агрегаты", но, поскольку я совершенно новичок в упругости, это выглядит слишком сложно, и я не могу найти правильный запрос для этого.
Уже перепробовал много разных комбинаций с разным уровнем вложенности.
В результате я не хочу подсчитывать, сколько устройств представлено в каждой группе этого диапазона. DeviceId также должен быть доступен внутри корзины, если я захочу получить список устройств или конкретные сведения об устройстве (оба будут новыми запросами и не связаны с этим).
Вот пример кода, который наверняка не работает:
GET events/_search { "size": 0, "aggs": {
"perMonth": {
"date_histogram": {
"field": "timestamp",
"interval": "1M",
"min_doc_count": 0
},
"aggs": {
"byDevice": {
"terms": {
"field": "deviceId"
}
},
"0-10": {
"bucket_script": {
"buckets_path": {
"count": "byDevice>_count"
},
"script": "params.count <= 10"
}
},
"10-100": {
"bucket_script": {
"buckets_path": {
"count": "byDevice>_count"
},
"script": "params.count > 10 && params.count >= 100"
}
},
"100-1000": {
"bucket_script": {
"buckets_path": {
"count": "byDevice>_count"
},
"script": "params.count > 100 && params.count >= 1000"
}
},
"1000+": {
"bucket_script": {
"buckets_path": {
"count": "byDevice>_count"
},
"script": "params.count > 1000"
}
}
}
}
}
}
В результате я не хочу получить:
{ "0-10": { doc_count: n, docs: [...]}, "10-100": { doc_count: n, docs: [...]}, "100-1000": { doc_count: n, docs: [...]}, "1000+": { doc_count: n, docs: [...]} }