У меня есть индекс ElasticSearch, заполненный унаследованными данными журнала, которые я хочу собирать по часам, чтобы понять, когда наиболее активные времена были для данных. Агрегация date_histogram показалась бы идеальной для этого, но у меня возникла проблема с выяснением, как получить агрегацию, чтобы получить более 5 сегментов.
В индексе содержится около 725 миллионов документов, охватывающих около 7 или 8 месяцев, так что это должно быть несколько тысяч блоков в час, но когда я использую следующее тело запроса, я получаю только 5 блоков
{
"query":{
"match_all":{}
},
"aggs":{
"events_per_hour":{
"date_histogram":{
"field":"timestamp",
"interval":"hour"
}
}
}
}
И результаты, похоже, соответствуют правильному периоду времени, но это вынуждает его складываться в 5 ведер вместо нескольких тысяч, которые я ожидал
{
"took": 276509,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 726450222,
"max_score": 0,
"hits": []
},
"aggregations": {
"events_per_hour": {
"buckets": [
{
"key_as_string": "1970-01-18T13:00:00.000Z",
"key": 1515600000,
"doc_count": 51812791
},
{
"key_as_string": "1970-01-18T14:00:00.000Z",
"key": 1519200000,
"doc_count": 130819007
},
{
"key_as_string": "1970-01-18T15:00:00.000Z",
"key": 1522800000,
"doc_count": 188046057
},
{
"key_as_string": "1970-01-18T16:00:00.000Z",
"key": 1526400000,
"doc_count": 296038311
},
{
"key_as_string": "1970-01-18T17:00:00.000Z",
"key": 1530000000,
"doc_count": 59734056
}
]
}
}
}
Я попытался решить проблему с помощью Google, но похоже на параметр размера, который можно добавить в агрегирование терминов, но он явно не доступен для гистограмм, и я попытался изменить настройку search.max_buckets
, но это тоже не сработало .
Есть ли способ заставить ES разделить эти данные на тысячи сегментов, которые мне нужны? Или я должен написать что-то, что просто загружает все данные и разбивает их вручную в памяти?