![](/img/trans.png)
[英]In Elasticsearch how can I get field length using the painless script?
[英]Incrementing Datetime field by one day in Elasticsearch Production Cluster using painless script
我在調試 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
將用於相同的索引更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.