譯自官方文檔,原文請戳這裏。
JSON中沒有date類型,因此 es 中的日期可以是:
- "2015-01-01" "2015/01/01 12:10:30" 這種字符串格式
- 從開始紀元(1970年1月1日0點) 開始的毫秒數
- 從開始紀元開始的秒數
es 會自動將時間轉換爲UTC(如果你設置了time-zone)並最終存儲爲一個代表從開始紀元起計算的毫秒數。
對日期的查詢會被自動轉換爲針對此long類型的查詢,而聚合之後的查詢結果會依據該field指定的格式重新轉爲String格式。
注意:日期最終都渲染爲字符串,即使它們的初始格式在JSON中是long格式。
Date也可以自定義,但如果你沒有指定format,es將使用默認值:
"strict_date_optional_time||epoch_millis"
date支持可選的時間戳,具體格式爲 strict_date_optional_time 或 milliseconds-since-the-epoch。示例如下:
PUT my_index
{
"mappings": {
"_doc": {
"properties": {
"date": {
"type": "date" // 1
}
}
}
}
}
PUT my_index/_doc/1
{ "date": "2015-01-01" } // 2
PUT my_index/_doc/2
{ "date": "2015-01-01T12:10:30Z" } // 3
PUT my_index/_doc/3
{ "date": 1420070400001 } // 4
GET my_index/_search
{
"sort": { "date": "asc"} // 5
}
1 使用默認格式
2 使用簡單date
3 使用帶 time 的 date
4 使用毫秒偏移量
5 sort 返回的日期格式全部都是毫秒偏移量
多日期格式
你可以使用 || 分隔符來指定多個日期格式。es將按順序進行匹配,直到找到一個能夠匹配上的格式。es將用此格式將long轉爲string。
PUT my_index
{
"mappings": {
"_doc": {
"properties": {
"date": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}
date類型field的參數
date類型的field接受以下參數:
boost | 提升查詢權重。浮點型,默認值 1.0 |
doc_values | 是否使用doc_values。如果確定不需要對此field進行排序/聚合,或者使用腳本,可以關閉。默認true |
format | 日期格式。默認 strict_date_optional_time || epoch_millis |
locale | 用於解決月份在各語言中沒有統一縮寫的問題。默認值爲 ROOT |
ignore_malformed | 當設置爲true時將忽略錯誤數字。如果設置爲false,遇到錯誤時將拋出異常並拒絕掉整個document |
index | 如果該字段可以被搜索,請設置爲true。默認爲true |
null_value | 當輸入值爲空時,使用該值來代替,必須爲format參數格式。默認爲null,意味着該字段丟失 |
store | 字段值是否應該在_source字段之外存儲和檢索。默認false。 |