Я работаю с документами, которые выглядят следующим образом:
{
"product_name": "abc",
"prices": {
"regular": 9.99,
"pricing_tables": [
{ "id": 1, "price": 8.99 },
{ "id": 2, "price": 7.99 }
]
}
}
Где Prices.pricing_tables - это вложенное поле.
Что я хочу сделать, это отсортировать со следующими логинами c, с заданным идентификатором таблицы цен:
- Если вложенное поле содержит указанный идентификатор, используйте pricing_tables.price
- Если вложенное поле не содержит id, use Prices.regular
Запрос, который я пытался использовать до сих пор:
"sort": [
{
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": """
if(doc['prices.pricing_tables.price'].size() != 0) {
return doc['prices.pricing_tables.price'].value;
}
else {
return doc['prices.regular'].value;
}
"""
},
"nested": {
"path": "prices.pricing_tables",
"filter": {
"term": {"prices.pricing_tables.id": 1}
}
},
"order": "asc"
}
}
]
Однако он не работает должным образом. Если во вложенном объекте priceing_tables нет записей, значение сортировки в результате всегда равно 1.7976931348623157E308
Чего мне здесь не хватает? Возможно ли это сделать?