2015-03-30 11 views
5

Chciałbym zrozumieć, w jaki sposób ES przechowuje wartości wewnętrzne w swoich indeksach. Czy zamienia się na UTC?zrozumienie, jak elastycznie przeszukuje daty we własnym zakresie

Mam pole "t" typu date. Oto mapowanie:

Teraz, kiedy wstawiam/dodaję dokument do ES, jak to jest przechowywać w swoich indeksach.

  1. "t": "1427700477165" (milisekundy wygenerowane z funkcji Date.now()). Czy ES rozpoznaje swój czas epoki w UTC i przechowuje tak jak jest?

  2. "t": "2015-03-29 T23: 59: 59" (odpowiednio dostosowuję format daty mapowania) - w jaki sposób ES przechowuje to. Jeśli przekształci się w UTC, skąd będzie wiedzieć, która strefa czasowa jest tą datą i przekształcić ją w UTC? Czy ES otrzymuje domyślną strefę czasową z komputera, na którym działa?

Dziękujemy!

Odpowiedz

10

Wewnętrznie (w ramach indeksu) Elasticsearch przechowuje wszystkie daty jako liczby w formacie epoka - tj. Liczbę milisekund od 01 stycznia 1970 00:00:00 GMT.

Jednak domyślnie Elasticsearch przechowuje również wiadomość wysłaną przez surowy JSON - więc po zwrocie _source zobaczysz wszystko, co zostało opublikowane w Elasticsearch.

Aby móc importować date ciągi do formatu epoki trzeba określić format w mapowaniu, na przykład albo predefined date format:

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

dla yyyyMMdd'T'HHmmss.SSSZ.

lub określić custom date format:

"t": { "type" : "date", "format" : "YYYY-MM-dd" } 
  • Jeśli nie format jest określony, domyślnie używany jest termin parsowanie ISODateTimeFormat.dateOptionalTimeParser.
  • W odwzorowaniu można określić wiele formatów daty - np. yyyy/MM/dd HH:mm:ss||yyyy/MM/dd
  • Jeśli żadna strefa czasowa jest określona następnie Elasticsearch zakłada UTC
+0

rozważmy "Format": "yyyyMMdd'T'HHmmss". Nie ma informacji o strefie czasowej. W której strefie czasowej ES bierze tę datę? – user3658423

+1

Elasticsearch przyjmuje UTC, jeśli nie podano informacji o strefie czasowej –