文章目录
实例
实例,将utc时间转换为东8时区时间并存储时间戳
POST user_at_index_sc/_update_by_query
{
"query": {
"range": {
"at_time_long": {
"lte": 3000
}
}
},
"script": {
"source": """
def src_time = ctx._source['at_time'];
if (/^\d{4}-\d{1,2}-\d{1,2} {1}\d{1,2}:\d{1,2}:\d{1,2}$/.matcher(src_time).find()) {
def t = LocalDateTime.parse(src_time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
ctx._source.at_time_long = t.atZone(ZoneId.of("America/Los_Angeles")).toInstant().toEpochMilli();
}
if (/^\d{4}-\d{1,2}-\d{1,2}T{1}\d{1,2}:\d{1,2}:\d{1,2}.\d{3}Z$/.matcher(src_time).find()) {
def t = LocalDateTime.parse(src_time, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"));
ctx._source.at_time_long = t.atZone(ZoneId.of("UTC")).toInstant().toEpochMilli();
ctx._source.at_time = t.atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneOffset.ofHours(8)).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
""",
"lang": "painless"
}
}
POST /_scripts/painless/_execute
{
"script": {
"source": """
def test = params.at_time;
if (/^\d{4}-\d{1,2}-\d{1,2} {1}\d{1,2}:\d{1,2}:\d{1,2}$/.matcher(test).find()) {
def t = LocalDateTime.parse(params.at_time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
return t.atZone(ZoneId.of("America/Los_Angeles")).toInstant().toEpochMilli();
}
if (/^\d{4}-\d{1,2}-\d{1,2}T{1}\d{1,2}:\d{1,2}:\d{1,2}.\d{3}Z$/.matcher(test).find()) {
def t = LocalDateTime.parse(params.at_time, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"));
return t.atZone(ZoneId.of("UTC")).toInstant().toEpochMilli();
}
return 0;
""",
"params": {
"at_time": "2019-05-24T06:16:27.000Z"
}
}
}
持久化脚本
POST _scripts/user_like_time_script
{
"script": {
"source": """
def src_time = ctx._source['at_time'];
if (/^\d{4}-\d{1,2}-\d{1,2} {1}\d{1,2}:\d{1,2}:\d{1,2}$/.matcher(src_time).find()) {
def t = LocalDateTime.parse(src_time, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
ctx._source.at_time_long = t.atZone(ZoneId.of("America/Los_Angeles")).toInstant().toEpochMilli();
}
if (/^\d{4}-\d{1,2}-\d{1,2}T{1}\d{1,2}:\d{1,2}:\d{1,2}.\d{3}Z$/.matcher(src_time).find()) {
def t = LocalDateTime.parse(src_time, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"));
ctx._source.at_time_long = t.atZone(ZoneId.of("UTC")).toInstant().toEpochMilli();
ctx._source.at_time = t.atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneOffset.ofHours(8)).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
""",
"lang": "painless"
}
}
使用时简化只需要指定id
POST user_at_index_sc/_update_by_query
{
"query": {
"range": {
"at_time_long": {
"lte": 3000
}
}
},
"script": {
"id": "user_like_time_script"
}
}