Я работаю над сайтом, подобным 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 так быстро и просто, что мне не хотелось бы отойти от него из-за этих проблем.