Это мой маппинг документа
"_source": {
"id": 60,
"price": 60,
"locations": [
{
"id": 1
"price": 70
},
{
"id": 5,
"price": 80
}
]
}
Параметр `price` может быть как в корне, так и вложенным в массиве объектов `locations`. Мне нужно фильтровать цену по обоим параметрам - если на вход подаётся значение `locationId`, то фильтровать по цене в этой локации, если нет, то по корневой.
Был написан painless скрипт:
if(params['locationId'] != null){
for (def location : doc['locations']) {
if (location.id == params['locationId']) {
if ((params['lte'] != null || location.price <= params['lte']) && (params['gte'] != null || location.price >= params['gte'])) {
return true;
} else {
return false;
}
}
}
}
return (params['lte'] != null || params._source.price <= params['lte']) && (params['gte'] != null || params._source.price >= params['gte']);
Пытаюсь его использовать:
"query": {
"bool": {
"filter": [
{
"script": {
"script": {
"source": "my_script",
"params": {
"locationId": "2"
}
}
}
}
]
}
}
Однако, получаю ошибку на второй строчке кода:
`No field found for [locations] in mapping with types []`
Как в данном случае получить доступ к вложенному полю `locations`? Я пытался обратиться к ним как: `params._source.locations`, так я уже делал в скрипте сортировки. Но видимо поле `params` не доступно из запроса на фильтрацию.