Я работаю над веб-сайтом, похожим на Airbnb, и сейчас переписываю нашу внутреннюю поисковую систему на основе SQL с помощью Algolia. До сих пор это было действительно приятное путешествие, так как мне удалось удалить много устаревшего кода и передать его на аутсорсинг с потрясающими результатами. Однако есть одна важная часть нашей поисковой системы, которую я не уверен, можно ли реализовать с помощью Algolia.
Внутри мы сохраняем доступность/недоступность (и цену) каждой даты для каждого актива в виде одной строки в базе данных. Это означает, что наша таблица availabilities
выглядит так:
asset_id | date | status | price_cents
-------- | ---------- | ----------- | -----------
1 | 2017-02-09 | available | 15000
1 | 2017-02-10 | available | 15000
1 | 2017-02-11 | unavailable | NULL
1 | 2017-02-12 | available | 20000
Когда пользователь ищет доступные свойства, он вводит диапазон дат и, при необходимости, диапазон цен.
Что мы делаем сейчас, так это просто запрашиваем таблицу availabilities
и убеждаемся, что все даты в диапазоне дат доступны для этого актива (т. е. количество доступных дат равно количеству дней в диапазоне). Если пользователь вводит диапазон цен, мы также следим за тем, чтобы средняя цена на эти даты находилась в пределах запрошенного диапазона. SQL-запрос довольно сложен, но именно это он и делает в конце дня.
Я пытался воспроизвести это с помощью Algolia, но не смог найти никакой документации о подобной функции. На самом деле, я сталкиваюсь с двумя отдельными проблемами прямо сейчас:
- У меня нет возможности гарантировать, что все даты в предоставленном диапазоне дат доступны, потому что Algolia практически не знает об ассоциациях, и
- У меня нет возможности рассчитать (и запросить) среднюю цену для указанного диапазона дат, потому что она зависит от ввода пользователя (т.е. диапазона дат).
Есть ли способ добиться этого с Алголией? Если нет, возможно ли использовать SQL или другой инструмент в сочетании с Algolia для достижения желаемого результата? Конечно, я мог бы сделать все это с помощью Elasticsearch, но Algolia настолько быстр и удобен, что мне не хотелось бы отказываться от него из-за этих проблем.