Авторизация
Забыли пароль?
Сброс пароля
Вернуться к авторизации

Оптимизация поиска в каталоге для крупной retail сети

25 ноября ‘22

Заказчик: Крупная федеральная retail сеть (NDA)

Как мы автоматизировали поиск в каталоге сайта сети магазинов, а также настроили поиск по свойствам и сортировку по релевантности и приоритетности.

Агентство-исполнитель кейса

IQ Dev

IT-компания, которая помогает project, product и CTO решить проблемы с кодом и предоставляет профессиональные команды backend frontend-разработчиков, чтобы в заданные сроки реализовать задачи Заказчика.

1. Вводная задача от заказчика, проблематика, цели

Сегодня retail выходит за рамки привычного нам оффлайн-магазина у дома. Всё больше эта сфера пользуется возможностями разработки, перенося свой бизнес в онлайн. Сегодня хотим рассказать о, казалось бы, простом кейсе: настройка поиска в каталоге сайта. Но не всё так однозначно, как нам казалось на первом этапе. О том как простая задача превратилась в бег с препятствиями рассказал наш тимлид Андрей Д.

Задачи:

1. Организовать сортировку результатов поиска на сайте по релевантности:

  • первые в списке отображаются товары, у которых все слова поискового запроса находятся в одной строке;
  • во-вторую очередь товары у которых все слова встречаются в разных свойствах, при этом должен учитывается «вес» свойства (об этом расскажем чуть ниже);
  • в - третью - отображаются товары, у которых встречается меньшее количество слов из поискового запроса.

2. Сделать возможность поиска по следующим свойствам:

  • бренд;
  • суббренд;
  • вид товара;
  • название производителя;
  • страна производитель.

3. Организовать сортировку результатов поиска по каталогу сайта в соответствии с «весом» свойства. Вес свойства выстроен по приоритетам:

  • название (самый приоритетный вес);
  • бренд;
  • суббренд;
  • вид товара;
  • состав;
  • название производителя;
  • страна производитель;
  • линейка;
  • тип миксовой позиции;
  • срок годности (наименее приоритетный).

То есть, если мы введем в поисковый запрос «порошок «Альпийская свежесть» », то нам в поиске должен выйти сначала товар с ключевыми словами в названии, а только потом товары бренда «Альпийская свежесть», т.к. коэффициент веса у названия выше, чем у бренда.

Цель ясна, задачи определены, разработчики подобраны, стек ясен, сроки определены. Приступаем к работе, решаем задачу, все счастливы.

Заказчиком был определен инструмент, через который мы должны реализовать поиск - система полнотекстового поиска Sphinx. Главными преимуществами системы является высокая скорость поиска и индексации, высокая масштабируемость, поддержка стоп-слов и морфологического поиска.

Но самым главным плюсом, выбранного инструмента являлось то, что Bitrix заявлял поддержку Sphinx «из коробки».

Реализация была поделена на этапы:

  • настройка Sphinx;
  • настройка Bitrix и интеграция Sphinx.

2. Описание реализации кейса и творческого пути по поиску оптимального решения

Настройка Sphinx

Отказаться от Sphinx и перейти на другую поисковую систему нельзя. Требование заказчика - только эта система. Что ж, приступим.

Все поисковые движки «внутри» работают примерно по одному принципу:

  • забирают тексты;
  • разбивают на отдельные слова;
  • проводят стемминг слов - вычленяют основу слова;
  • высчитывают вес фразы в тексте;
  • возвращаем пользователю отсортированный согласно весу фразы поисковый запрос.

Мы помним, что важная задача не только выдавать товары по соответствию слов в поисковом запросе, но ранжировать товары в соответствии с весом свойства.

Так вот, решение Bitrix и Sphinx «из коробки» - это добавить в индекс Sphinx только заголовок и весь текст из описаний и свойств товаров. То есть поиск будет возможен, но их вес не будет поддаваться контролю и ранжированию.

Для того, чтобы все же заставить Sphinx ранжировать товары, а не превращать свойства, описания товаров в кашу из текста нам пришлось настраивать Sphinx.

Этапы настройки Sphinx

Приложения могут взаимодействовать со Sphinx несколькими способами, но самым простым и удобным, является специальный sql-подобный язык запросов, который носит название SphinxQL. В этом случае Sphinx использует протокол базы данных MySql (которая используется у нас и единственный протокол который поддерживает битрикс).

Для этого мы:

  • Создали новый индекс реального времени.
  • Описали наши поля и атрибуты для индексирования. При использовании баз данных в качестве источника необходимо явно перечислить все поля и атрибуты, которые мы собираемся индексировать. При этом необходимо указать их тип, название и дополнительные параметры, если они есть.

Настройка Bitrix

Теперь перейдем к настройке Bitrix. Вся работа с поисковым индексом происходит через промежуточные таблицы. Поэтому для начала мы создали столбцы для каждого нового свойства (бренд, суббренд, вид товара и так далее).

А затем наполнили их, чтобы мы могли добавить их в индекс Sphinx. Для этого на моменте переиндексации товара добавили заполнение наших полей и скорректировали запросы на добавление/обновление данных в Sphinx.

После того как у нас описаны свойства, необходимо было задать коэффициенты веса каждого свойства.

Теперь Sphinx может ранжировать все свойства и выдать корректный ответ на поисковый запрос.

3. Результаты сотрудничества

Столкнувшись с рядом проблем мы все же смогли выдать приемлемое решение и настроить сортировку товаров на сайте. Как правило, такие задачи могут решаться и другими способами, но конкретно здесь пришлось искать альтернативные решения и при этом не наплодить легаси по пути.

4. Заключение

На данный момент решения работает, не мешает масштабировать каталог, адаптивно к изменениям и обновлениям.

Агентство-исполнитель кейса

IQ Dev

IT-компания, которая помогает project, product и CTO решить проблемы с кодом и предоставляет профессиональные команды backend frontend-разработчиков, чтобы в заданные сроки реализовать задачи Заказчика.

Ruward использует технологию "cookie" – сохранение на компьютере пользователя небольших текстовых файлов. Также мы используем на сайте сервис Яндекс.Метрика. Эта информация не позволит идентифицировать вас, однако может помочь нам улучшить работу нашего сайта. Если вы не согласны, чтобы мы использовали данные технологии, вы должны соответствующим образом установить настройки вашего браузера или не использовать наш сайт.

Согласен