求助:Elasticsearch如何解析带序数词后缀的日期格式
解决Elasticsearch解析带序数后缀的日期问题
嘿,带th/st这类序数后缀的日期确实容易踩坑!别担心,Joda-Time其实支持通过可选文本匹配来处理这种情况,刚好能解决你的需求。
你只需要在日期格式里把序数后缀用单引号包裹,再放到方括号[]里标记为可选内容,这样Elasticsearch就能自动忽略这些后缀,正确解析日期了。
给你补全后的完整映射代码:
PUT mynewindex { "mappings": { "mytype": { "properties": { "syslog-timestamp": { "type": "date", "format": "MMMM d['th']['st']['nd']['rd'] yyyy, HH:mm:ss.SSS" } } } } }
来拆解一下这个格式的关键部分:
MMMM:匹配完整的英文月份名称(比如你的例子里的April)d:匹配1-2位的日期数字(比如10)['th']['st']['nd']['rd']:方括号表示这些文本是可选匹配,单引号里的内容就是要忽略的序数后缀,覆盖了所有英文日期的序数情况(1st、2nd、3rd、4th...)yyyy, HH:mm:ss.SSS:匹配4位年份、24小时制的时分秒,以及毫秒数
你可以插入一条测试数据验证一下:
POST mynewindex/mytype/1 { "syslog-timestamp": "April 10th 2018, 07:32:45.987" }
之后用GET mynewindex/mytype/1查询,就能看到这个日期已经被正确解析成Elasticsearch的日期格式啦。
内容的提问来源于stack exchange,提问作者Gamer1120
相关产品推荐
相关产品推荐

