Я пытаюсь создать строку из байтов в сценарии 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
. В документации ясно говорится, что это так. Дух, это даже в том же сценарии выше. Что мне не хватает? Почему можно создать массив, а не строку?