Почему ElasticSearch возвращает только 5 сегментов для агрегатов dat_histogram? - PullRequest
0 голосов
/ 03 июля 2018

У меня есть индекс 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 разделить эти данные на тысячи сегментов, которые мне нужны? Или я должен написать что-то, что просто загружает все данные и разбивает их вручную в памяти?

1 Ответ

0 голосов
/ 04 июля 2018

Если вы переведете «key_as_string» (1970-01-18T13: 00: 00.000) с даты на эпоху, вы увидите: Отметка времени эпохи: 1515600 Отметка времени в миллисекундах: 1515600000

И если вы переведете 1515600000 в эпоху на дату, вы получите правильную дату (среда, 10 января 2018 г., 16:00:00)

Итак, похоже, что вы отправляете эпоху, но в формате даты поля определены миллисекунды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...