使用无痛脚本在 Elasticsearch 生产集群中将日期时间字段增加一天
Incrementing Datetime field by one day in Elasticsearch Production Cluster using painless script
我在调试 yyyy-MM-dd 格式的生产级 Elastic Search Index 日期时间字段时遇到困难,我想 update/increment 一天前的日期时间字段,例如 - 2009-07-01 i想要将索引中的所有文档更新为 2009-07-02。
我也想知道我是否必须使用重新索引 api 或通过查询更新 api
目前我尝试使用以下无痛脚本更新文档,但它不起作用
POST klaprod-11042022/_update_by_query
{
"script": {
"source": "def df = DateTimeFormatter.ofPattern('yyyy-MM-dd');def tmp = LocalDateTime.parse(ctx._source.debate_section_date,df);ctx._source.debate_section_date=tmp.plusDays(1);",
"lang": "painless"
},
"query": {"match_all":{}}
}
感谢社区的任何建议
您遇到异常,因为您的日期不包含任何时间。您需要使用 LocalDate
的 atStartOfDay()
方法来添加一天。
POST datecheck/_update_by_query
{
"script": {
"source": "def df = DateTimeFormatter.ofPattern('yyyy-MM-dd');def tmp = LocalDate.parse(ctx._source.date,df).atStartOfDay();ctx._source.date=tmp.plusDays(1);",
"lang": "painless"
},
"query": {"match_all":{}}
}
这将生成日期加上一个日期并加上时间。因此,如果您不需要时间,则可以在脚本中设置 ctx._source.date
字段之前再次格式化日期。
I also want to know whether i have to use the re index api or update
by query api
如果要将数据复制到新索引,则可以使用 reindex
api 否则 _update_by_query
将用于相同的索引更新。
阅读文档后,以下内容对我有用,您不必轻松调用 DateTimeFormatter
,因为 LocalDate
可以解析原始 yyyy-MM-dd
格式的日期时间字符串
POST klaprod-11042022/_update_by_query
{
"script": {
"source": "def tmp = LocalDate.parse(ctx._source.debate_section_date);ctx._source.debate_section_date=tmp.plusDays(1);",
"lang": "painless"
},
"query": {"match_all":{}}
}
我在调试 yyyy-MM-dd 格式的生产级 Elastic Search Index 日期时间字段时遇到困难,我想 update/increment 一天前的日期时间字段,例如 - 2009-07-01 i想要将索引中的所有文档更新为 2009-07-02。
我也想知道我是否必须使用重新索引 api 或通过查询更新 api
目前我尝试使用以下无痛脚本更新文档,但它不起作用
POST klaprod-11042022/_update_by_query
{
"script": {
"source": "def df = DateTimeFormatter.ofPattern('yyyy-MM-dd');def tmp = LocalDateTime.parse(ctx._source.debate_section_date,df);ctx._source.debate_section_date=tmp.plusDays(1);",
"lang": "painless"
},
"query": {"match_all":{}}
}
感谢社区的任何建议
您遇到异常,因为您的日期不包含任何时间。您需要使用 LocalDate
的 atStartOfDay()
方法来添加一天。
POST datecheck/_update_by_query
{
"script": {
"source": "def df = DateTimeFormatter.ofPattern('yyyy-MM-dd');def tmp = LocalDate.parse(ctx._source.date,df).atStartOfDay();ctx._source.date=tmp.plusDays(1);",
"lang": "painless"
},
"query": {"match_all":{}}
}
这将生成日期加上一个日期并加上时间。因此,如果您不需要时间,则可以在脚本中设置 ctx._source.date
字段之前再次格式化日期。
I also want to know whether i have to use the re index api or update by query api
如果要将数据复制到新索引,则可以使用 reindex
api 否则 _update_by_query
将用于相同的索引更新。
阅读文档后,以下内容对我有用,您不必轻松调用 DateTimeFormatter
,因为 LocalDate
可以解析原始 yyyy-MM-dd
格式的日期时间字符串
POST klaprod-11042022/_update_by_query
{
"script": {
"source": "def tmp = LocalDate.parse(ctx._source.debate_section_date);ctx._source.debate_section_date=tmp.plusDays(1);",
"lang": "painless"
},
"query": {"match_all":{}}
}