Я пытаюсь сделать запрос выбора с помощью сценария Painless, но получаю сообщение об ошибке, что скрипт недопустим.
Что я пытаюсь сделать в этом упрощенном сценариидолжен проверить, являются ли мои данные параметры взрослыми после возраста в 'unit.info'.
Ошибка:
"if(containsAge(doc['unitHolder.units'], params.ages)){",
" ^---- HERE",...
"caused_by": {
"type": "illegal_argument_exception",
"reason": "No field found for [unitHolder.units] in mapping with types [pack]"
}
Запрос запроса:
{
"query": {
"bool": {
"must": [
{
"script": {
"script": {
"source": "boolean containsAge(def unit, def ages)
{
if(unit.info.children.minAge != null)
{
int nrAdults = 0;
int nrChildren = 0;
int nrInfants = 0;
for (age in ages)
{
if (age < unit.info.children.maxAge.value)
{
nrAdults++;
}else if(age > unit.info.children.minAge.value)
{
nrInfants++;
}else{
nrChildren++;
}
}
if (nrAdults > 2)
{
return true;
}
}
return false;
}
if(containsAge(doc['unitHolder.units'], params.ages))
{
return true;
}
return false;",
"lang": "painless",
"params": {
"ages": [
50,
35
]
}
}
}
}
]
}
},
"size": 10
}
Отображение:
"mappings": {
"pack": {
"properties": {
"unitHolder": {
"properties": {
"createDate": {
"type": "date"
},
"units": {
"properties": {
"info": {
"properties": {
"children": {
"properties": {
"maxAge": {
"type": "long"
},
"minAge": {
"type": "long"
}
}
}
}
}
}
}
}
}
}
}
}