Я неправильно ввел много документов в Elasticsearch, используя неправильное поле @timestamp
. Я уже изменил уязвимый конвейер Logstash, чтобы использовать правильные временные метки, но я не могу повторно загрузить старые данные.
Однако у меня есть другое поле документа, которое можно использовать как метку времени (json.created_at
). Поэтому я хотел бы обновить поле. Я обнаружил, что для этого могу использовать действие _update_by_query
, но я пробовал несколько версий, которые не работали, в том числе:
POST logstash-rails_models-*/_update_by_query
{
"script": {
"lang": "painless",
"source": "ctx._source.@timestamp = ctx._source.json.created_at"
}
}
Это жалуется на неожиданный характер:
{
"error": {
"root_cause": [
{
"type": "script_exception",
"reason": "compile error",
"script_stack": [
"ctx._source.@timestamp = ctx._source. ...",
" ^---- HERE"
],
"script": "ctx._source.@timestamp = ctx._source.json.created_at",
"lang": "painless"
}
],
"type": "script_exception",
"reason": "compile error",
"script_stack": [
"ctx._source.@timestamp = ctx._source. ...",
" ^---- HERE"
],
"script": "ctx._source.@timestamp = ctx._source.json.created_at",
"lang": "painless",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "unexpected character [@].",
"caused_by": {
"type": "lexer_no_viable_alt_exception",
"reason": null
}
}
},
"status": 500
}
Что мне делать?