Обновление со сценариями в Elastisearch - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь использовать скрипты в Elasticsearch для обновления некоторых данных.Мой сценарий выглядит следующим образом:

    for i in df.index:
        es.update(
            index=indexout,
            doc_type="suggestedTag",
            id=df['dataId'][i],
            _source=True,
            body={
                "script": {
                    "inline": "ctx._source.items.suggestionTime = updated_time",
                    "params": {
                        "updated_time": {
                            "field": df['suggestionTime'][i]
                        }
                    }
                }
            }
        )

Но когда я это делаю, я получаю следующую ошибку:

поднять HTTP_EXCEPTIONS.get (status_code, TransportError) (status_code, error_message, Additional_info))asticsearch.exceptions.RequestError: RequestError (400, 'invalid_argument_exception', '[jLIZdmn] [127.0.0.1:9300] [indexices: data / write / update [s]]')

ИЯ посмотрел на этот вопрос , чтобы включить его, но даже с этим и документацией все равно возникает та же ошибка.Я вставил следующие элементы в файл config /asticsearch.yml:

script.inline: true
script.indexed: true
script.update: true 

Но я все еще не могу избежать RequestError, который у меня есть с самого начала

1 Ответ

0 голосов
/ 03 декабря 2018

Вы почти на месте, просто нужно добавить params. перед updated_time:

{
  "script": {
    "inline": "ctx._source.items.suggestionTime = params.updated_time",
    "params": {
      "updated_time": {
        "field": df['suggestionTime'][i]
      }
    }
  }
} 

Если вы попытаетесь выполнить свой запрос в консоли Kibana , он будет выглядетьчто-то вроде этого:

POST /my-index-2018-12/doc/AWdpylbN3HZjlM-Ibd7X/_update
{
  "script": {
    "inline": "ctx._source.suggestionTime = updated_time",
    "params": {
      "updated_time": {
        "field": "2018-10-03T18:33:00Z"
      }
    }
  }
}

Вы увидите полный ответ Elasticsearch, который будет выглядеть как ваше сообщение об ошибке + ценные детали:

{
  "error": {
    "root_cause": [
      {
        "type": "remote_transport_exception",
        "reason": "[7JNqOhT][127.0.0.1:9300][indices:data/write/update[s]]"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "failed to execute script",
    "caused_by": {
      "type": "script_exception",
      "reason": "compile error",
      "script_stack": [
        "... _source.suggestionTime = updated_time",
        "                             ^---- HERE"
      ],
      "script": "ctx._source.suggestionTime = updated_time",
      "lang": "painless",
      "caused_by": {
        "type": "illegal_argument_exception",
        "reason": "Variable [updated_time] is not defined."
      }
    }
  },
  "status": 400
}

Что указывает на синтаксическую ошибку(параметры, по-видимому, вводятся как params объект ).

Я считаю, что настройки сценариев не являются источником проблемы в этом случае.

Надеюсь, чтопомогает!

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