世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
问 :es field 日期类型都有哪些?各自有什么特点?
答 :
1. 日期类型有 : date 和 date_nanos
2. date : 内部以timestamps的million seconds存储
可以进行字符串与时间格式的转化
默认支持的格式 :
1. yyyy-MM-dd 或 yyyy-MM-ddTHH:mm:ssZ
2. millionseconds-since-the-epoch
3. seconds-since-the-epoch
date_nanos : 精确到nanos,是对date的补充
问 :date 如何使用?
答 :
# date
# 配置项 :
# 1. boost : 默认1.0
# 2. doc_values : 默认true
# 3. format : 可以自定义,默认strict_date_optional_time||epoch_millis
# 4. locale : 区域,默认ROOT locale
# 5. ignore_malformed : 忽略不规范内容,默认false
# 6. index : 默认true
# 7. null_value : 空值填充,默认null
# 8. store : 默认false
# 9. meta : 元数据
PUT /date_test
{
"mappings" : {
"properties" : {
"my_date" : {"type" : "date"}
}
}
}
GET /date_test/_mapping/field/my_date
POST /date_test/_doc
{
"my_date" : "1989-01-10"
}
POST /date_test/_doc
{
"my_date" : "1989-01-10T11:40:00Z"
}
POST /date_test/_doc
{
"my_date" : 1420070400001
}
GET /date_test/_search
{
"sort" : {"my_date" : "desc"}
}
# 结果
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "date_test",
"_type" : "_doc",
"_id" : "2muj0XcBnJvha9PMBYzv",
"_score" : null,
"_source" : {
"my_date" : 1420070400001
},
"sort" : [
1420070400001
]
},
{
"_index" : "date_test",
"_type" : "_doc",
"_id" : "1Guh0XcBnJvha9PMc4wj",
"_score" : null,
"_source" : {
"my_date" : "1989-01-10T11:40:00Z"
},
"sort" : [
600435600000
]
},
{
"_index" : "date_test",
"_type" : "_doc",
"_id" : "zGue0XcBnJvha9PMjIww",
"_score" : null,
"_source" : {
"my_date" : "1989-01-10"
},
"sort" : [
600393600000
]
}
]
}
}
# date_nanos
PUT /date_nanos_test
{
"mappings" : {
"properties" : {
"my_date_nanos" : {"type" : "date_nanos"}
}
}
}
GET /date_nanos_test/_mapping/field/my_date_nanos
POST /date_nanos_test/_doc
{
"my_date_nanos" : "1989-01-10"
}
POST /date_nanos_test/_doc
{
"my_date_nanos" : "1989-01-10T11:40:00.12345678Z"
}
POST /date_nanos_test/_doc
{
"my_date_nanos" : 1420070400
}
GET /date_nanos_test/_search
# 结果
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "date_nanos_test",
"_type" : "_doc",
"_id" : "22uq0XcBnJvha9PMTYyG",
"_score" : 1.0,
"_source" : {
"my_date_nanos" : "1989-01-10"
}
},
{
"_index" : "date_nanos_test",
"_type" : "_doc",
"_id" : "3Gur0XcBnJvha9PMN4yc",
"_score" : 1.0,
"_source" : {
"my_date_nanos" : "1989-01-10T11:40:00.12345678Z"
}
},
{
"_index" : "date_nanos_test",
"_type" : "_doc",
"_id" : "3Wur0XcBnJvha9PMxowe",
"_score" : 1.0,
"_source" : {
"my_date_nanos" : 1420070400
}
}
]
}
}
# 取纳秒值
GET /date_nanos_test/_search
{
"script_fields" : {
"my_nanos" : {
"script" : {
"lang" : "painless",
"source" : "doc['my_date_nanos'].value.nano"
}
}
}
}
# 结果
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "date_nanos_test",
"_type" : "_doc",
"_id" : "22uq0XcBnJvha9PMTYyG",
"_score" : 1.0,
"fields" : {
"my_nanos" : [
0
]
}
},
{
"_index" : "date_nanos_test",
"_type" : "_doc",
"_id" : "3Gur0XcBnJvha9PMN4yc",
"_score" : 1.0,
"fields" : {
"my_nanos" : [
123456780
]
}
},
{
"_index" : "date_nanos_test",
"_type" : "_doc",
"_id" : "3Wur0XcBnJvha9PMxowe",
"_score" : 1.0,
"fields" : {
"my_nanos" : [
400000000
]
}
}
]
}
}
# 取格式化
GET /date_nanos_test/_search
{
"docvalue_fields": [
{
"field" : "my_date_nanos",
"format" : "strict_date_time"
}
]
}
# 结果
{
"took" : 10,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "date_nanos_test",
"_type" : "_doc",
"_id" : "22uq0XcBnJvha9PMTYyG",
"_score" : 1.0,
"_source" : {
"my_date_nanos" : "1989-01-10"
},
"fields" : {
"my_date_nanos" : [
"1989-01-10T00:00:00.000Z"
]
}
},
{
"_index" : "date_nanos_test",
"_type" : "_doc",
"_id" : "3Gur0XcBnJvha9PMN4yc",
"_score" : 1.0,
"_source" : {
"my_date_nanos" : "1989-01-10T11:40:00.12345678Z"
},
"fields" : {
"my_date_nanos" : [
"1989-01-10T11:40:00.12345678Z"
]
}
},
{
"_index" : "date_nanos_test",
"_type" : "_doc",
"_id" : "3Wur0XcBnJvha9PMxowe",
"_score" : 1.0,
"_source" : {
"my_date_nanos" : 1420070400
},
"fields" : {
"my_date_nanos" : [
"1970-01-17T10:27:50.400Z"
]
}
}
]
}
}