Как перезаписать поле @timestamp другим полем в Elasticsearch? - PullRequest
0 голосов
/ 08 апреля 2019

Я неправильно ввел много документов в 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
}

Что мне делать?

1 Ответ

0 голосов
/ 08 апреля 2019

Правильный способ доступа к этому полю - через скобки и заключенные в кавычки:

POST logstash-rails_models-*/_update_by_query
{
  "script": {
    "lang": "painless",
    "source": "ctx._source['@timestamp'] = ctx._source.json.created_at"
  }
}

См. Также эту тему и дополнительную информацию об обновлении полей с помощью Painless .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...