es中的date類型


JSON中沒有date類型,es中的date可以由下面3種方式表示:

①格式化的date字符串,例如"2018-01-01"或者"2018-01-01 12:00:00"

②一個long型的數字,代表從1970年1月1號0點到現在的毫秒數

③一個integer型的數字,代表從1970年1月1號0點到現在的秒數

在es內部,date被轉為UTC,並被存儲為一個長整型數字,代表從1970年1月1號0點到現在的毫秒數

date類型字段上的查詢會在內部被轉為對long型值的范圍查詢,查詢的結果類型是字符串。

假如插入的時候,值是"2018-01-01",則返回"2018-01-01"

假如插入的時候,值是"2018-01-01 12:00:00",則返回"2018-01-01 12:00:00"

假如插入的時候,值是1514736000000,則返回"1514736000000"。(進去是long型,出來是String型)

date格式可以在put mapping的時候用 format 參數指定,如果不指定的話,則啟用默認格式,是"strict_date_optional_time||epoch_millis"。這表明只接受符合"strict_date_optional_time"格式的字符串值,或者long型數字。

strict_date_optional_time是date_optional_time的嚴格級別,這個嚴格指的是年份、月份、天必須分別以4位、2位、2位表示,不足兩位的話第一位需用0補齊。不滿足這個格式的日期字符串是放不進es中的。

date-opt-time = date-element ['T' [time-element] [offset]]
date-element = std-date-element | ord-date-element | week-date-element
std-date-element = yyyy ['-' MM ['-' dd]]
ord-date-element = yyyy ['-' DDD]
week-date-element = xxxx '-W' ww ['-' e]
time-element = HH [minute-element] | [fraction]
minute-element = ':' mm [second-element] | [fraction]
second-element = ':' ss [fraction]
fraction = ('.' | ',') digit+

實測,僅支持"yyyy-MM-dd"、"yyyyMMdd"、"yyyyMMddHHmmss"、"yyyy-MM-ddTHH:mm:ss"、"yyyy-MM-ddTHH:mm:ss.SSS"、"yyyy-MM-ddTHH:mm:ss.SSSZ"格式,不支持常用的"yyyy-MM-dd HH:mm:ss"等格式。注意,"T"和"Z"是固定的字符,在獲取"yyyy-MM-ddTHH:mm:ss"、"yyyy-MM-ddTHH:mm:ss.SSS"、"yyyy-MM-ddTHH:mm:ss.SSSZ"格式字符串值時,不能直接以前面格式格式化date,而是需要多次格式化date並且拼接得到。

epoch_millis約束值必須大於等於Long.MIN_VALUE,小於等於Long.MAX_VALUE

date類型字段除了type參數必須指定為date外,還有一個常用的參數 format 。可以通過該參數來顯式指定es接受的date格式,如果有多個的話,多個date格式需用||分隔。之后index/create/update操作時,將依次匹配,如果匹配到合適的格式,則會操作成功,並且查詢時,該文檔該字段也會以該格式展示。否則,操作不成功。如

PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "updated_date": {
          "type":   "date",
          "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
        }
      }
    }
  }
}

java操作es date類型最佳實踐:

創建索引時指定date類型format為"yyyy-MM-dd HH:mm:ss",限制只能接受"yyyy-MM-dd HH:mm:ss"格式的date字符串

在代碼中把Date實例或者LocalDateTime實例先轉化為 "yyyy-MM-dd HH:mm:ss"格式的字符串后再存進去,這樣取出來時也是"yyyy-MM-dd HH:mm:ss"格式。


免責聲明!

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



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