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

Оптимизация поиска в каталоге для крупной 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-разработчиков, чтобы в заданные сроки реализовать задачи Заказчика.