我在调试yyyy-MM-dd格式的生产级弹性搜索索引日期时间字段时遇到了困难;我想把日期时间字段更新/增加一天例如:2009-07-01我想把索引中所有文档的日期时间字段都更新到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":{}}
}
感谢社区的任何建议
在完成文档后,以下内容对我有效,您不必无痛地调用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":{}}
}
您会遇到异常,因为您的日期没有任何时间。您需要使用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
字段之前再次格式化日期。
我还想知道我是否必须使用重新索引api或更新通过查询api
如果要将数据复制到新索引,则可以使用reindex
api,否则_update_by_query
将用于相同的索引更新。