формат даты эластичного переиндексации слишком короткий - PullRequest
0 голосов
/ 12 марта 2019

Попытка переиндексировать индекс, потому что формат поля даты изменился.Формат изменился с

 ...
 "start_date": {
      "type":   "date",
      "format": "yyyy-MM-dd HH:mm",
       "fields": {
        "keyword": { 
          "type": "keyword"
        }
      }
    }
  ...

на

 ...
 "start_date": {
      "type":   "date",
      "format": "yyyy-MM-dd HH:mm:ss",
       "fields": {
        "keyword": { 
          "type": "keyword"
        }
      }
    }
 ...

Я пытаюсь переиндексировать свой индекс в индекс tmp, но он выдает следующую ошибку:

"cause": {
    "type": "mapper_parsing_exception",
    "reason": "failed to parse [start_date]",
    "caused_by": {
      "type": "illegal_argument_exception",
      "reason": "Invalid format: \"2019-01-30 13:03\" is too short"
    }
  },

Итак, теперь у меня большая проблема.Как изменить формат моего поля даты?Есть ли другой способ не переиндексировать?

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Поскольку формат изменился, вам нужно добавить :00 в поле даты, чтобы соответствовать новому формату:

POST _reindex
{
  "source": {
    "index": "oldindex"
  },
  "dest": {
    "index": "newindex"
  },
  "script": {
    "source": "ctx._source.start_date = ctx._source.start_date + ':00';"
  }
}
0 голосов
/ 12 марта 2019

Я хотел бы внести свой вклад в ответ @ Val, если вы ищете более гибкое решение. Пожалуйста, проверьте код ниже:

POST _reindex
{
  "source": { "index": "old-index" },
  "dest": { "index": "new-index" },
  "script": {
    "source": """
      def old_sf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
      def old_dt = old_sf.parse(ctx._source.start_date);
      ctx._source.start_date = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss').format(old_dt);
    """
  }
}

Таким образом, вам будет значительно проще изменить формат даты. Например,

POST _reindex
{
  "source": { "index": "old-index" },
  "dest": { "index": "new-index" },
  "script": {
    "source": """
      def old_sf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
      def old_dt = old_sf.parse(ctx._source.start_date);
      ctx._source.start_date = new SimpleDateFormat('HH:mm:ss dd MMM yyyy').format(old_dt);
    """
  }
}
...