Elasticsearch 日期時間處理


Elasticsearch中定義時間的類型為Date

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 type默認格式:

"strict_date_optional_time||epoch_millis"

 

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”。

 

##索引中定義的日期格式與提交數據的日期格式要一致,否則會報錯。

 

創建索引是指定date format示例:

PUT my_index { "mappings": { "_doc": { "properties": { "date": { "type":   "date", "format": "yyyy-MM-dd" } } } } }

date官網介紹:
https://www.elastic.co/guide/en/elasticsearch/reference/current/date.html

 

參考:

https://www.2cto.com/database/201806/752189.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM