Сохранение даты в микросекундном формате в ElasticSearch

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

При импорте данных Elasticsearch усекает микросекундный формат даты в миллисекундный формат. Как я могу сохранить данные в микросекундном формате? Документация asticsearch говорит, что они используют API времени JODA для хранения форматов даты, который не поддерживает микросекунды и усечение, добавляя Z в конце временной метки.

Примерная временная метка после усечения: 2018-05-02T08: 13: 29.268Z

Исходная метка времени в базе данных: 2018-05-02T08: 13: 29.268482

1 ответ

Решение

Z это не результат усечения, а часовой пояс GMT.

ES также поддерживает микросекунды, если вы указали правильный формат даты в своем отображении.

Если поле даты в вашем отображении указано так:

    "date": {
      "type": "date",
      "format": "yyyy-MM-dd'T'HH:mm:ss.SSSSSS"
    }

Затем вы можете индексировать даты с точностью до микросекунды, как в вашей базе данных

ОБНОВИТЬ

Вот полное воссоздание, которое показывает вам, что это работает:

PUT myindex
{
  "mappings": {
    "doc": {
      "properties": {
        "date": {
          "type": "date",
          "format": "yyyy-MM-dd'T'HH:mm:ss.SSSSSS"
        }
      }
    }
  }
}

PUT myindex/doc/1
{
  "date": "2018-05-02T08:13:29.268482"
}

Боковое примечание: тип данных date хранит данные в миллисекундах в elasticsearch, поэтому здесь в случае, если уровень точности наносекунд требуется в запросах диапазонов дат; соответствующий тип данных - date_nanos

Другие вопросы по тегам