es日期format_es中的date类型

Elasticsearch的date类型可以表示为格式化的日期字符串、毫秒数或秒数。date内部存储为UTC的毫秒值,并在查询时转换为范围查询。插入时的日期格式影响返回结果的格式。默认格式为'strict_date_optional_time||epoch_millis',支持'yyyy-MM-dd'等特定格式,不支持'yyyy-MM-dd HH:mm:ss'等常见格式。format参数用于指定日期格式,多个格式间用||分隔。Java操作时建议创建索引时指定为'yyyy-MM-dd HH:mm:ss'格式。
摘要由CSDN通过智能技术生成

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"格式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值