Elasticsearch имеет агрегацию, называемую гистограммой.Он создаст массив сегментов, которые будут разделены на заранее объявленные интервалы.Если поле имеет значения от 0 до 199 и я установил интервал на 100, тогда будет 2 сегмента: [0, 100), [100, 200).
{
"aggregations" : {
"prices" : {
"histogram" : {
"field" : "price",
"interval" : 100
}
}
}
}
Результат:
{
...
"aggregations": {
"prices" : {
"buckets": [
{
"key": 0.0,
"doc_count": 1
},
{
"key": 100.0,
"doc_count": 1
}
]
}
}
}
Но проблема в том, чтобы разделить результат, например, на 10 равных сегментов.Размер интервала будет зависеть от минимальных и максимальных значений, которые заранее неизвестны.Самый простой вариант, который я пытаюсь реализовать: я получаю минимальное и максимальное значения в первом запросе.Затем я получаю размер интервала: (максимальное значение - минимальное значение) / 10. Затем со вторым запросом я могу указать рассчитанный интервал и получить ровно 10 сегментов.Но я хотел бы получить все данные в одном запросе, если это возможно.Кроме того, я не хотел бы получать ошибку, когда интервал меньше 10, то есть минимальная сумма меньше максимальной, чем размер требуемых сегментов.Буду признателен, если кто-то поможет в решении проблемы.