Elasticsearch-日期類型
date類型用於存儲日期和時間。它是這樣運作的:通常提供一個表示日期的字符串,例如2019-06-25T22:47。然后,ES解析這個字符串,然后將其作為long的數值存入Lucene的索引。該long型數值是從1970年1月1日00:00:00 UTC(UNIX紀元)到所提供的時間之間已經過去的毫秒數。
當搜索文檔的時候,仍然提供date的字符串,在后台ES將這些字符串解析並按照數值來處理。這樣做的原因是和字符串相比,數值在存儲和處理時更快。
date字符串的數據格式是通過format選項來定義的,ES默認解析ISO 8601的時間戳。
ISO8601是一種交流日期和時間相關數據的國際標准,由於RFC 3339而廣泛運用於時間戳。ISO 8601日期張下邊這樣:
2019-06-25T22:51:45.453-03:00
包含了亞秒和時區。
使用format選項來指定日期格式的時候,有以下兩種選擇
(1) 使用預定義的時間格式。例如,date格式解析2019-06-25這樣的日期。
(2) 設置自己定制的格式。可以指定時間戳所遵循的模式。例如,指定MMMYYYY來解析 jun 2019這樣的日期。
使用定制的時間格式
定制版:’MMM DD YYYY’
在索引music的album類型下,添加新的屬性映射,類型為date,format自定義
curl -XPUT 'localhost:9200/music/_mapping/album' -d '{ "album":{ "properties":{ "format_date":{ "type":"date", "format":"MMM DD YYYY" } } } }'
新增一條數據
curl -XPUT 'localhost:9200/music/album/4' -d '{ "name":"十一月的肖邦", "date":"2005-11-24T22:20", "format_date":"Nov 24 2005" }'