elasticSearch 時間類型

Elasticsearch Date類型使用技巧

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

使用date類型可以用如下兩種方式:

使用毫秒的時間戳,直接將毫秒值傳入即可。

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

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

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。

  date類型是包含時區信息的,如果我們沒有在json代表日期的字符串中顯式指定時區,對es來說沒什麼問題,但是如果通過kibana顯示es裏的數據時,就會出現問題,數據的時間會晚8個小時。因爲kibana從es裏讀取的date類型數據,沒有時區信息,kibana會默認當作0時區來解析,但是kibana在通過瀏覽器展示的時候,會通過js獲取當前客戶端機器所在的時區,也就是東八區,所以kibana會把從es得到的日期數據減去8小時。這裏就會導致kibana經常遇到的“數據時間延遲8小時”的問題。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章