Поиск по периодам elasticsearch
Задача заключается в поиске нужного лота у которого в определенный промежуток времени, задана искомая актуальная цена.
У лота есть периоды от и до и в рамках этого периода присутствует определенная цена, по истечению периода настает следующий период, у которого цена ниже, или выше предыдущей.
В MySQL Бд это реализовано с помощью двух таблиц, первая это lots вторая lot_periods. Соответственно периоды, в таблице lot_periods связаны с лотом через lot_id. Мы можем построить запрос от сущности лота, задать промежуток даты от и даты до, а также цену от и до и получить необходимый лот.
Структура БД lot_periods:
Пример записи lot_periods
Вот теперь пытаюсь повторить это же на эластике, но пока безрезультатно :)
Мапинг для индексирования
{
"mappings" : {
"properties" : {
"id": {
"type": "integer"
},
"periods": {
"type": "nested",
"properties" : {
"start_date_requests": {"type": "date"},
"end_date_requests": {"type": "date"},
"current_price": {"type": "integer"}
}
}
}
}
}
Запрос
{
"query": {
"bool":{
"must":{
"nested": {
"path": "periods",
"query": {
"bool": {
"must": [
{ "range": {"periods.start_date_requests": {"gte": "passed_start_date"}} },
{ "range": {"periods.end_date_requests": {"lte": "passed_end_date"}} },
{ "range": {"periods.current_price": {"gte": "passed_price_from"}} },
{ "range": {"periods.current_price": {"lte": "passed_price_to"}} }
]
}
}
}
}
}
}
}
Ну вот как-то так получилось, думаю если бы был всего один период, то все бы находилось нормально.
Подскажите пожалуйста как это реализовать ?

