提问人:Anthony T 提问时间:10/25/2023 最后编辑:imotovAnthony T 更新时间:10/26/2023 访问量:21
用于非空 ArrayList 的 Elasticsearch null_pointer_exception
Elasticsearch null_pointer_exception for non-null ArrayList
问:
在Elasticsearch中给定适当的键时,我在访问映射中的值时遇到了问题。
查询如下:
{
"query": {
"bool": {
"filter": [ .... some conditions]
}
},
"script_fields" : {
"test1" : {
"script": {
"source": "ArrayList quotes = params._source.elements[0].somefield.parameters; def out = parameters; return out;",
"lang": "painless"
}
}
},
"sort": [{"valueTosort": {"order": "asc"}}]
}
返回
"hits": [
{
"_index": "indexname",
"_type": "data",
"_id": "currentid",
"_score": null,
"fields": {
"test1": [
{
"size": 10.1,
"value": 0.0,
"additionalField": 1.0
}
]
},
"sort": [
1695827532254
]
},
这是意料之中的。但是,一旦我尝试访问“参数”元素
{
"query": {
"bool": {
"filter": [ .... some conditions]
}
},
"script_fields" : {
"test1" : {
"script": {
"source": "ArrayList quotes = params._source.elements[0].somefield.parameters; def out = parameters[0]; return out;",
"lang": "painless"
}
}
},
"sort": [{"valueTosort": {"order": "asc"}}]
}
我明白了null_pointer_exception
"reason": {
"type": "script_exception",
"reason": "runtime error",
"script_stack": [
"out = parameters[0]; ",
" ^---- HERE"
],
"script": "ArrayList quotes = params._source.elements[0].somefield.parameters; def out = parameters[0]; return out;",
"lang": "painless",
"position": {
"offset": 90,
"start": 78,
"end": 95
},
"caused_by": {
"type": "null_pointer_exception",
"reason": "Cannot invoke \"java.util.List.get(int)\" because \"<local3>\" is null"
}
},
如果使用 .size() 或 .length 检查参数的大小,则会出现相同的异常
我已经检查了该元素是否不为空(将“参数”与 null 进行比较)——它不是 null,并使用 containsKey() 检查了“parameters”键是否存在,并使用“instance of”检查了“parameters”的类型(在将 params._source.elements[0].somefield.parameters 的值分配给 ArrayList 之前)。
请您告知必须做些什么才能访问 “params._source.elements[0].somefield.parameters[0].additionalField”或“params._source.elements[0].somefield.parameters[0].value”(显然不起作用)
答: 暂无答案
评论
"test1": ["size": 10.1, "value": 0.0, "additionalField": 1.0}]