elasticSearch 時間類型

Elasticsearch Date類型使用技巧php

elasticsearch原生支持date類型,結合該類型和Kibana能夠作出漂亮有用的圖表。這裏簡單記錄下使用的方法。html

使用date類型能夠用以下兩種方式:json

使用毫秒的時間戳,直接將毫秒值傳入便可。瀏覽器

傳入格式化的字符串,默認是ISO 8601標準,例如2015-02-27T00:07Z(零時區)、2015-02-27T08:07+08:00(東八區),這兩個時間實際是同一個,只是時區不一樣,關於時間戳,能夠參見我以前的文章。另外還能夠自定義時間格式,參見es的文檔。但我的不建議使用自定義格式,設置不當容易遇到時區問題。在php中獲取ISO 8601標準的時間很簡單,date('c',time())便可。app

elasticsearch默認會自動識別date類型,若是想關閉該功能,修改mapping的設置'date_detection' => false便可 。elasticsearch

elasticsearch原生支持date類型,json格式經過字符來表示date類型。因此在用json提交日期至elasticsearch的時候,es會隱式轉換,把es認爲是date類型的字符串直接轉爲date類型。至於什麼樣的字符串es會認爲能夠轉換成date類型,參考elasticsearch官網介紹https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html。ide

  date類型是包含時區信息的,若是咱們沒有在json表明日期的字符串中顯式指定時區,對es來講沒什麼問題,可是若是經過kibana顯示es裏的數據時,就會出現問題,數據的時間會晚8個小時。由於kibana從es裏讀取的date類型數據,沒有時區信息,kibana會默認看成0時區來解析,可是kibana在經過瀏覽器展現的時候,會經過js獲取當前客戶端機器所在的時區,也就是東八區,因此kibana會把從es獲得的日期數據減去8小時。這裏就會致使kibana常常遇到的「數據時間延遲8小時」的問題。ui

  因此最佳實踐方案就是:咱們在往es提交日期數據的時候,直接提交帶有時區信息的日期字符串,如:「2016-07-15T12:58:17.136+0800」。orm

相關文章
相關標籤/搜索