Я работаю над веб-сайтом Airbnb, и я сейчас переписываю нашу собственную поисковую систему на базе SQL с Algolia. До настоящего времени это было действительно приятное путешествие, так как мне удалось удалить много устаревшего кода и передать его на аутсорсинг с потрясающими результатами. Тем не менее, есть одна критическая часть нашей поисковой системы, которую я не уверен, что можно реализовать с 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 так быстро и легко, что мне не хотелось бы отойти от него из-за этих проблем.
К сожалению, мы сохраняем доступность всего года. Есть ли способ использовать SQL для фильтрации до или после Algolia? –
Тогда вы будете смотреть на 66795 диапазонов дат за квартиру, что, вероятно, было бы слишком дорого. – Jerska
Ожидается ли, что список результатов будет минимальным (<1000)? Например, вы также ограничиваете свое местоположение? Если это так, вы можете использовать Algolia для получения списка идентификаторов объектов, соответствующих запросу text + location, и отправить этот список идентификаторов в MySQL для вычисления доступных из этого списка. – Jerska