Проверьте нулевой параметр в безболезненном - Elasticsearch - PullRequest
0 голосов
/ 07 ноября 2019

Как мы должны проверить, имеет ли значение ключ в карте, переданный в качестве параметра безболезненному сценарию, значение? В настоящее время я делаю это в Elasticsearch 6.8.4

if (params.feedId!=null) {
    whatever()
}

, но выдает это исключение, когда

params.feedId

равно нулю

ElasticsearchException[Elasticsearch exception [type=illegal_argument_exception, reason=Cannot cast null to a primitive type [void].]]

Он отлично работает с Elasticsearch 5.6.13, так что, похоже, произошли серьезные изменения, но я пока ничего не смог найти.

ОБНОВЛЕНИЕ: Это былона самом деле это не проблема с этой частью скрипта, но в некоторых его частях мы выполняли return null; , чтобы прервать процесс скрипта, который по какой-то причине больше не работает. Чтобы дать больше контекста, я делаю эти обновления, используя Java API, в частности клиент Rest High Level.

Мне удалось воспроизвести проблему с помощью команды curl, подобной этой

curl -X POST "localhost:9200/myindex/_doc/1/_update?pretty" -H 'Content-Type: application/json' -d'
{
        "script": {
                "source": "ctx._source.result = true; return null;" 
        }
}'

Это приводит к следующему выводу:

{
  "error" : {
    "root_cause" : [
      {
        "type" : "remote_transport_exception",
        "reason" : "[sBix--f][172.18.0.4: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" : [
        "... ce.result = true; return null;",
        "                             ^---- HERE"
      ],
      "script" : "ctx._source.result = true; return null;",
      "lang" : "painless",
      "caused_by" : {
        "type" : "illegal_argument_exception",
        "reason" : "Cannot cast null to a primitive type [void]."
      }
    }
  },
  "status" : 400
}

Просто замена return null; for return; делает этот скрипт нормально работающим в ES 6.8.4.

Обнаружил эту проблему в Elasticsearch: https://github.com/elastic/elasticsearch/issues/35888. Есть некоторые несоответствия в том, как работает короткое замыкание в разных версиях Elasticsearch.

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