Я хочу написать скрипт для script_score вasticsearch.
В Безболезненная документация есть список java классов в разделе "Ссылка общего API" .
GET hockey/_search
{
"explain": true,
"query": {
"match_all": {}
},
"script_fields": {
"total_goals": {
"script": {
"lang": "painless",
"source": """
int[] arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
return arr;
""",
"params":{
"last" : "any parameters required"
}
}
}
}
}
Вышеописанный скрипт работает как положено. Но вместо этого я хочу использовать ArrayList Java или какой-то другой класс.
GET hockey/_search
{
"explain": true,
"query": {
"match_all": {}
},
"script_fields": {
"total_goals": {
"script": {
"lang": "painless",
"source": """
ArrayList<Integer> al = new ArrayList<Integer>();
al.add(1);
al.add(2);
return al;
""",
"params":{
"last" : "any parameters required"
}
}
}
}
}
это выдает следующую ошибку.
{
"error" : {
"root_cause" : [
{
"type" : "script_exception",
"reason" : "compile error",
"script_stack" : [
"\n ArrayList<Integer> al = new ArrayL ...",
" ^---- HERE"
],
"script" : "\n ArrayList<Integer> al = new ArrayList<Integer>();\n al.add(1);\n al.add(2);\n return al;\n \n ",
"lang" : "painless"
}
],
"type" : "search_phase_execution_exception",
"reason" : "all shards failed",
"phase" : "query",
"grouped" : true,
"failed_shards" : [
{
"shard" : 0,
"index" : "hockey",
"node" : "UIMgEAZNRzmIpRGyQtNk9g",
"reason" : {
"type" : "script_exception",
"reason" : "compile error",
"script_stack" : [
"\n ArrayList<Integer> al = new ArrayL ...",
" ^---- HERE"
],
"script" : "\n ArrayList<Integer> al = new ArrayList<Integer>();\n al.add(1);\n al.add(2);\n return al;\n \n ",
"lang" : "painless",
"caused_by" : {
"type" : "illegal_argument_exception",
"reason" : "invalid sequence of tokens near ['<'].",
"caused_by" : {
"type" : "no_viable_alt_exception",
"reason" : null
}
}
}
}
]
},
"status" : 400
}
Если возможно использовать класс ArrayList, тогда
Нужно ли его импортировать из java .util?