elasticsearch日期類型 原

譯自官方文檔,原文請戳這裏

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。

 

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