Хроники Битрикса: интеграция с Elasticsearch

Хроники Битрикса: интеграция с Elasticsearch

Хроники Битрикса: интеграция с Elasticsearch

Однажды, по велению заказчика или нежеланию очередной раз вставлять костыли в битриксовые алгоритмы работы фильтра, поиска или каталога (а то и всего вместе взятого), встаёт вопрос интеграции с Elasticsearch. Идея, в общем-то, не нова, ведь эластик является самым популярным поисковым движком аж с 2010 года, и это весьма оправдано. У него огромнейшие возможности, удобное API, скорость выборки, поражающая воображение, особенно после битриксовых запросов. Отдельно стоит упомянуть его работу с морфологией: устранение опечаток, транслитерация, разбиение на лексемы, нечёткий поиск по множеству параметров и всё то, что порядочный заказчик хочет от поиска на своём сайте. В теории звучит здорово, и мы решаем – интеграции быть.

С чего начать?

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

Во-вторых, быстро не будет. Это я о работе подрядчика, ведь время на поддержку стандартного функционала, связанного с функционалом каталога и поиска увеличится. Как минимум вдвое. Возможно, втрое… Нет, это не зависит от навыков разработки, просто теперь, кроме битрикса, у вас на поводке ещё один питомец и всё, что вы делаете, нужно делать с учетом его наличия и жизнедеятельности.

Обо всем этом перед разработкой необходимо оповестить заказчика, ибо не каждый понимает, что стоит за быстрым и шустрым поиском, и не каждый готов впоследствии за это платить. И поверьте, иногда это опасение оправдано. Но вот необходимость этой интеграции превысила все озвученные минусы, все стадии принятия пройдены, и разработка запущена, что дальше?

Через тернии к звездам

В первую очередь, дам вам совет, который очень помог мне: не нужно жалеть времени на проектирование! Грамотно составленный план разработки в дальнейшем сэкономит большое количество времени, тем более что сейчас есть очень большое количество онлайн-инструментов и плагинов для проектирования. Старайтесь не привязываться при реализации к одному проекту, поскольку, во-первых, данная реализация может пригодиться вам на других проектах, а во-вторых, масштабные реализации (а это, несомненно, она) стоит разрабатывать с позиции «от общего – к частному». Тем более, что многие IDE сейчас предоставляют функционал генерации шаблонов ваших классов по составленным вами диаграммам. Не разработка, а одно удовольствие.

Далее: битрикс предоставляет нам возможность реализовывать функционал с помощью модуля – не пренебрегайте этой возможностью. В будущем это облегчит вам жизнь и позволит предоставить пользователям гибкие настройки (а клиенты любят настройки).

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

И последнее, морально готовьтесь, что вам никто не поможет, кроме документации эластика (и то даже она – не всегда). Причем, если вы когда-то ранее ее читали в качестве ознакомления, то это не считается, даже если дважды. В процессе реализации преобразования битриксового массива фильтра в запрос эластика вы полюбите битрикс. Вы даже найдёте его запросы логичными и понятными, но отступать уже поздно. К слову, любовь продлится до получения первых результатов по вашему фильтру, точнее до того, как вы оцените скорость получения. Разочарование вас также ждёт, когда вы будете корячить обратно ёмкую и удобную структуру, которую вам вернул эластик в битриксовую, но тут уже ничего не поделать (на самом деле поделать – vue.js и переработка шаблона нам в помощь, но это уже совсем другая история).

Если отбросить прозу, то алгоритм внедрения эластика в любую структуру сайта на битриксе будет содержать следующие основные шаги:

  1. Сбор информации для индекса
  2. Реализация API для формирования запросов (основные - отправка/просмотр/поиск/сортировка/удаление)
  3. Замена вывода данных
Всё остальное – опционально, вы можете разработать сколь угодно мощную систему интеграции, но общая схема будет именно эта.

Но есть нюанс…

Всё это действительно здорово, эластик-мощный движок, покрывающий большинство наших запросов. По своему опыту интеграций могу отметить следующие преимущества:

  • Снижение нагрузки на сайт
  • Повышение скорости загрузки страниц
  • Более точные результаты поиска, которые учитывают опечатки, ошибки и возможности языка
  • Обмен данными происходит гораздо быстрее, чем создание фасетного индекса
  • Данные хранятся в удобном для разработки формате
Но порой все эти плюсы меркнут от одного момента, который часто не закладывают в интеграцию с эластиком: всё остальное остаётся на битриксе. Да, безусловно, скорость всё равно повышается, однако примите совет: откажитесь от стандартной реализации компонента фильтра. Скорость, с которой он формирует массив для фильтрации, мягко говоря, оставляет желать лучшего. В моей практике реальные результаты ускорения страниц в разы были достигнуты только при переработке компонентов каталога и фильтра на vue: высоконагруженный интернет-магазин буквально стал летать. В идеале также нужна переработка меню, поскольку на многих проектах это – больное место. Но это вновь уже совсем другая история…

Выводы

Итак, хотя внедрение эластика – весьма непростой процесс, требующий серьёзной подготовки, чёткого планирования и проектирования, вы не пожалеете. Грамотное внедрение увеличит скорость, распределит нагрузку на проекте и позволит в дальнейшем работать с удобной структурой и адекватным api. Просто попробуйте, а дальше – всё в ваших руках.

Услуги, которые могут решить задачу

26.04.2022

Дарья Свиридова

Е-мейл практикум по работе с отзывами в интернете
Е-мейл практикум по работе с отзывами в интернете
Хотите получить индивидуальное решение для вашего проекта?
Оставьте заявку, и мы свяжемся с Вами