Я пытаюсь создать строку из байтов в скрипте Painless, как показано ниже, но в итоге получаю ошибку вокруг ключевого слова new
. Наш Elasticsearch — 6.2.8.
(Проверка длины в конце предназначена только для краткости, поэтому скрипт возвращает логическое значение.)
{
"size": 1,
"query": {
"bool" : {
"filter" : {
"script" : {
"script" : {
"source": "byte[] a = new byte[]{65, 66, 67}; String b = new String(a, StandardCharsets.UTF_8); b.length() > 0",
"lang": "painless"
}
}
}
}
}
}
Ошибка, как показано ниже:
"script_stack": [
"... {65, 66, 67}; String b = new String(a, StandardCha ...",
" ^---- HERE"
],
"lang": "painless",
"type": "illegal_argument_exception",
"reason": "Unknown new call on type [java.lang.String]."
Должен признаться, я в замешательстве. Это мое первое приключение с Painless, но я видел десятки примеров с ключевым словом new
. В документации четко указано, что это так. Да, это даже в том же сценарии выше. Что мне не хватает? Почему можно создавать массив, а не строку?