У меня есть индекс, содержащий поездки. Каждая поездка будет иметь несколько отправлений, каждая отправка будет иметь свою собственную дату отправления и набор цен (каждая с другой валютой).
Я хочу иметь возможность запросить и найти все поездки в пределах определенного диапазона дат и затем для каждой из этих поездок я хочу выделить самую дешевую цену из соответствующих отправлений.
Моя структура данных выглядит примерно так:
{
"id": 123,
"name": "Cool trip",
"highlightedDeparture": {
"startDate": "2020-02-01",
"yearMonth": 202001,
"prices": [
{
"currencyCode": "GBP",
"price": 99
}
]
},
"departures": [
{
"startDate": "2020-01-07",
"yearMonth": 202001,
"prices": [
{
"currencyCode": "GBP",
"price": 123
}
]
},
{
"startDate": "2020-01-14",
"yearMonth": 202001,
"prices": [
{
"currencyCode": "GBP",
"price": 456
}
]
},
{
"startDate": "2020-01-21",
"yearMonth": 202001,
"prices": [
{
"currencyCode": "GBP",
"price": 789
}
]
},
{
"startDate": "2020-02-01",
"yearMonth": 202001,
"prices": [
{
"currencyCode": "GBP",
"price": 99
}
]
}
]
}
В настоящее время, когда поездка индексируется для выделенного отправления по умолчанию задан общий самый дешевый отправления, и он предварительно рассчитывается до начала индексации.
Я хочу иметь возможность выполнить следующий запрос и каким-то образом выделить выделенное поле отправления «переопределено». самым дешевым за январь 2020 года, который будет стоить 123.
{
"query":{
"bool":{
"must":[
{
"nested":{
"inner_hits":{
"name":"highlightedAvailability",
"sort":[
{
"departures.prices.price":{
"nested":{
"filter":{
"term":{
"departures.prices.currencyCode":{
"value":"GBP"
}
}
},
"path":"departures.prices"
},
"order":"asc"
}
}
]
},
"path":"departures",
"query":{
"term":{
"departures.yearMonth":{
"value":"202001"
}
}
}
}
}
]
}
},
"_source":{
"excludes":[
"departures"
],
"includes":[
"*"
]
}
}
Мой желаемый ответ на этот запрос будет выглядеть так:
{
"id": 123,
"name": "Cool trip",
"highlightedDeparture": {
"startDate": "2020-01-07",
"yearMonth": 202001,
"prices": [
{
"currencyCode": "GBP",
"price": 123
}
]
}
}
В настоящее время я Я достигаю этого, обрабатывая ответ elasti c и выбирая самый дешевый из внутреннего привета. ц. Это кажется неэффективным и добавляет задержку. Я хотел бы знать, возможно ли это с нативным Elasticsearch.
К вашему сведению - при необходимости можно изменить индексирование.