2015-03-30 4 views
5

Я хотел бы понять, как ES хранит значения даты внутри своих индексов. Преобразует ли он в UTC?понимание того, как elasticsearch хранит даты внутри

У меня есть поле «t» типа date. Вот картинка:

"t": { "type" : "date" }, 

Теперь, когда я вставляю/добавляю документ в ES, как он хранит его индексы.

  1. "t": "1427700477165" (миллисекунды, генерируемые функцией Date.now()). Знает ли ES время своей эпохи в UTC и магазины, как есть?

  2. «t»: «2015-03-29T23: 59: 59» (я соответствующим образом изменяю формат даты сопоставления) - как ES сохраняет это. Если он преобразуется в UTC, как он знает, какой часовой пояс этой даты, и конвертировать его в UTC? Получает ли ES часовой пояс по умолчанию от работы компьютера?

Спасибо!

ответ

10

Внутри (в пределах индекса) Elasticsearch сохраняет все даты в виде цифр в формате эпохи - то есть число миллисекунд с 01 января 1970 года 00:00:00 GMT.

Однако Elasticsearch по умолчанию также сохраняет ваше сообщение с открытым сообщением JSON, поэтому при возврате _source вы увидите все, что было опубликовано в Elasticsearch.

Чтобы иметь возможность импортировать даты строки в формат эпохи вам нужно указать формат в вашем отображении, например, либо predefined date format:

"t": { "type" : "date", "format" : "basic_date_time" } 

для yyyyMMdd'T'HHmmss.SSSZ.

или указать custom date format:

"t": { "type" : "date", "format" : "YYYY-MM-dd" } 
  • Если не указан формат, дата по умолчанию разбор используется ISODateTimeFormat.dateOptionalTimeParser.
  • В отображении могут быть указаны несколько форматов даты, например. yyyy/MM/dd HH:mm:ss||yyyy/MM/dd
  • Если нет часовой пояс не указан, то Elasticsearch предполагает UTC
+0

давайте рассмотрим "формат": "yyyyMMdd'T'HHmmss". Он не имеет информации о часовом поясе. В какой временной зоне ES принимает эту дату? – user3658423

+1

Elasticsearch принимает UTC, если информация о часовом поясе не указана –

Смежные вопросы