#elasticsearch
#elasticsearch
Вопрос:
Я хотел бы отсортировать результирующий набор на основе минимального значения «priceWithPartialDiscount», которое представляет собой поле внутри вложенного поля.
Рассмотрим вложенное поле:
"children": [
{
"partialDiscountPercent": 0.0,
"productId": 497071,
"price": 200.0,
"priceWithPartialDiscount": 200.0,
"partialDiscountAmount": 0.0
},
{
"partialDiscountPercent": 0.0,
"productId": 497072,
"price": 100.0,
"priceWithPartialDiscount": 100.0,
"partialDiscountAmount": 0.0
}
],
Я написал код для сортировки:
"sort":[{
"children.priceWithPartialDiscount":{
"missing":"_last",
"mode":"min",
"nested":{
"filter":{
"nested":{
"path":"children",
"query":{
"range":{
"children.price":{
"gte":0.0
}
}
}
}
},
"path":"children"
},
"order":"asc"
}
}]
, и я ожидаю
"sort": [100.0]
Но, к моему удивлению, я вижу:
"sort": [200.0]
Я допустил ошибку?
Ответ №1:
Удалите вложенность 2-го уровня внутри filter
, потому path
что он уже определен во вложенном контексте родителя:
{
"sort": [
{
"children.priceWithPartialDiscount": {
"missing":"_last",
"mode": "min",
"nested": {
"filter": {
"range": {
"children.price": {
"gte": 0
}
}
},
"path": "children"
},
"order": "asc"
}
}
]
}
Я думаю, что вложенный запрос 2-го уровня неочевидным образом искажал ваши значения сортировки.
Комментарии:
1. 💪🏻 Приятно. Привет, бесстыдный плагин — я пишу руководство по elasticsearch, в котором я более подробно обсуждаю использование вложенных полей. Я был бы признателен, если вы найдете 2 минуты, чтобы сообщить мне конкретно, о чем вы хотели бы узнать больше. Приветствия