Хотим поделиться опытом разработки эффективного поиска для одного интересного проекта. Мы подробно рассмотрим, как сделали поиск удобным, быстрым и привлекательным для пользователей, увеличив конверсию на 27% всего лишь за счет грамотной настройки Elasticsearch.

О клиенте
Наш заказчик — британская компания Swan Hellenic, организующая круизы класса люкс в уникальные уголки мира. Они известны своим вниманием к деталям и предлагают путешественникам эксклюзивные маршруты с погружением в местную культуру и историю. Их флот состоит из трех лайнеров (Minerva, Vega и Diana), каждый из которых оборудован комфортными номерами и профессиональными экскурсоводами.
Задача: повысить удобство поиска
Ранее поиск на сайте работал довольно примитивно: пользователь должен был точно ввести название круиза, корабля или порта назначения. Любое отклонение от точного совпадения приводило к отсутствию результатов. Наша задача: сделать поиск таким, чтобы он понимал желания пользователя даже тогда, когда тот допускает ошибку или ищет приблизительное значение.
Цели:
Увеличить количество покупок через поисковую выдачу, повысив ее точность и качество.
Улучшить UX, сделав процесс поиска быстрым и приятным.
Предоставлять пользователям персонализированные рекомендации на основе предыдущих запросов и популярных направлений.
Решение: почему выбрали Elasticsearch?
Мы рассматривали несколько путей реализации, включая создание собственного решения на PHP с использованием Redis. Но тут вспомнили об одном мощном инструменте — Elasticsearch. Этот открытый и бесплатный поисковый движок обладает рядом преимуществ:
Быстрота: благодаря оптимизации поиска и индексированию данных, обработка крупных массивов выполняется мгновенно.
Масштабируемость: Elasticsearch поддерживает распределенную архитектуру, позволяя масштабироваться под любые объемы данных.
Анализ данных: помимо простого поиска, инструмент способен анализировать поведение пользователей и улучшать выдачу.
Поддержка полнотекстового поиска: поиск работает по разным языкам и формам слов, учитывая орфографические ошибки и синонимические замены.
И конечно, Elasticsearch прекрасно интегрируется с PHP-фреймворком Symfony, которым пользовались наши разработчики.
Как реализовали поиск?
Подсказки для удобства ввода (Autocomplete)
Чтобы облегчить жизнь пользователю, мы внедрили автоподсказки. Каждый раз, когда человек начинает вводить запрос, ему предлагаются варианты возможных запросов. Эти подсказки формируются динамически каждую ночь: обновляется база круизов, портов и кораблей, гарантируя свежесть данных.
Кроме того, поисковая логика принимает во внимание текущие тенденции и предпочтения пользователей. Например, если на данный момент популярностью пользуется направление "Льды Арктики", первые подсказки начнут появляться уже после "Льды", основываясь на статистике поиска и релевантности запросов в конкретное время.
Финальный поиск по каталогу круизов
Главная цель финального поиска — выдавать точные результаты, даже если пользователь сделал ошибку или указал название неправильно. Система сама исправляет ошибки и находит соответствия среди всех имеющихся круизов.
Какие трудности возникли?
Несмотря на очевидные плюсы Elasticsearch, пришлось столкнуться с некоторыми сложностями:
Недостаточная гибкость библиотеки для Symfony: стандартный модуль оказался ограниченным, поэтому мы разработали собственную интеграционную структуру поверх чистого PHP-клиента.
Моментальность выдачи подсказок: подсказки должны отображаться немедленно после каждого нажатия клавиши. Чтобы достичь этого, мы переложили основную нагрузку на Elasticsearch, который идеально подходит для такой задачи.
Многоязычная среда: поскольку сайт доступен на нескольких языках, важно было показать пользователю правильный контент на его родном языке. Это потребовало тонкой настройки индексов и фильтров.
Результаты внедрения
Что получилось в итоге?
Время обработки запроса сократилось до 0.3 секунды (независимо от объема базы).
Количество уникальных поисковых запросов увеличилось до 2 миллиардов потенциально возможных комбинаций.
Конверсия заказов через поиск выросла на 27%.
Пользователи теперь получают мгновенные подсказки, находят нужные круизы быстрее и точнее, а значит, вероятность покупки значительно возрастает.
Заключение
Elasticsearch стал хорошим решением для нашего проекта. Благодаря грамотно настроенной интеграции, высокоскоростному поиску и удобству работы с многоязычными базами данных, мы смогли существенно улучшить взаимодействие пользователей с сайтом.