Logstash преобразует yyyy-MM-dd в yyyy-MM-dd'T'HH:mm:ss.SSSZ

Я использую плагин logstash-input-jdbc для синхронизации моих данных из mysql в elasiticsearch. Однако, когда я посмотрел данные в elasticsearch, я обнаружил, что формат полей всех типов дат изменился с «гггг-ММ-дд» на «гггг-ММ-дд'Т'ЧЧ:мм:сс.SSSZ" У меня почти 200 полей, тип которых — дата, поэтому я хочу знать, как настроить logstash, чтобы он мог выводить формат «гггг-ММ-дд» вместо «гггг-ММ-дд'Т'ЧЧ: мм: сс». .СССЗ".


person wangjinhao    schedule 07.01.2019    source источник


Ответы (1)


Elasticsearch хранит даты в виде временных меток UTC:

Внутри даты преобразуются в формат UTC (если указан часовой пояс) и сохраняются в виде длинного числа, представляющего миллисекунды с начала эпохи.

Запросы по датам внутренне преобразуются в запросы диапазона в этом длинном представлении, а результат агрегирования и сохраненных полей преобразуется обратно в строку в зависимости от формата даты, связанного с полем.

Поэтому, если вы хотите сохранить формат yyyy-MM-dd, вам придется сохранить его как keyword (с которым вы не сможете выполнять запросы диапазона).

Вы можете изменить отображение Kibana, чтобы отображать только формат гггг-мм-дд, но обратите внимание, что он преобразует дату в часовой пояс средства просмотра, что может привести к другому дню, чем вы ввели в поле ввода.

Если вы хотите принять дату в виде строки, вам нужно создать сопоставление для рассматриваемого индекса, чтобы предотвратить обработку даты по умолчанию.

person Alcanzar    schedule 07.01.2019
comment
Я уже сохранил эти поля как ключевое слово в es, но он по-прежнему показывает формат «гггг-ММ-дд» T'HH: mm: ss.SSSZ. - person wangjinhao; 08.01.2019
comment
вам нужно посмотреть сопоставление индекса и убедиться, что оно сохранено как ключевое слово (GET /index/_mapping в инструменте разработчика). Также, если вы изменили сопоставление, вам нужно обновить индекс в кибане, чтобы он понял, что он изменился. - person Alcanzar; 08.01.2019