1. 默认情况下
时间格式是可以自定义的,但是如果没有指定一个格式,它将使用默认的格式(时间格式里面必须包含年份,并且时间中的时分秒是可选的),例如格式:yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ
or yyyy-MM-dd
说明一下:T表示分隔符,Z表示UTC世界标准时间,在标准时间上加8小时,就是北京时间
举例
#索引创建
PUT /my_test
{
"mappings": {
"properties": {
"my_time":{
"type": "date"
}
}
}
}
#正确
PUT /my_test/_doc/1
{
"my_time":"2015-01-01"
}
#正确
PUT /my_test/_doc/2
{
"my_time":"2015-01-01T12:10:30Z"
}
#正确
PUT /my_test/_doc/3
{
"my_time":"1420070400001"
}
#正确
PUT /my_test/_doc/4
{
"my_time":"2015"
}
#错误
PUT /my_test/_doc/5
{
"my_time":"2015-01-01 12:10:30"
}
2. 指定多个数据格式
#索引创建
PUT /my_test
{
"mappings": {
"properties": {
"my_time":{
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||yyyyMMdd"
}
}
}
}
#正确
PUT /my_test/_doc/1
{
"my_time":"2015-05-05 23:10:30"
}
#正确
PUT /my_test/_doc/2
{
"my_time":"2015-01-01 12:10:30"
}
#正确
PUT /my_test/_doc/3
{
"my_time":"2016-01-01 12:10:30"
}
#正确
PUT /my_test/_doc/4
{
"my_time":"20170228"
}
#正确
PUT /my_test/_doc/5
{
"my_time":null
}
3. 执行查询
使用es执行range在date类型字段上的查询
- 假设当前时间为:2022-10-26 15:46:00
- es中有一条时间字段为2022-10-26 15:46:00的数据
- 使用range进行搜索近半年的数据,语句如下
GET /my_test/_search
{
"sort": [
{
"_id": {
"order": "asc"
}
}
],
"query": {
"range": {
"my_time": {
"gte": "2022-10-26 15:46:00||-6M",
"lte": "2022-10-26 15:46:00"
}
}
}
}
详细参考:https://www.elastic.co/guide/en/elasticsearch/reference/7.12/query-dsl-range-query.html