簡體   English   中英

使用無痛腳本在 Elasticsearch 生產集群中將日期時間字段增加一天

[英]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":{}}
}

您遇到異常是因為您的日期不包含任何時間。 您需要使用LocalDateatStartOfDay()方法來添加一天。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM