Sphinx поиск для 1С-Битрикс: настройка, морфология и delta-индексация

Почему стандартный поиск в Битрикс не справляется с большим каталогом? Каталог на 200 000 товаров — стандартный поиск Битрикс выдаёт страницу за 5 секунд, фильтрация по свойствам — ещё дольше. Стандартный модуль поиска использует таблицы b_search_*, которые не оптимизированы для сложной фильтраци
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Sphinx поиск для 1С-Битрикс: настройка, морфология и delta-индексация
Средний
~1-2 недели

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1428
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    1008
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    745
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    869
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    782
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1149

Почему стандартный поиск в Битрикс не справляется с большим каталогом?

Каталог на 200 000 товаров — стандартный поиск Битрикс выдаёт страницу за 5 секунд, фильтрация по свойствам — ещё дольше. Стандартный модуль поиска использует таблицы b_search_*, которые не оптимизированы для сложной фильтрации по множеству свойств и полнотекстового поиска с морфологией. Sphinx решает обе проблемы: инкрементальная индексация, морфология, фасетный поиск. Мы настраиваем его под ключ за 3–10 дней. Движок читает данные напрямую из MySQL, что упрощает интеграцию: не нужно писать экспортёр — источник данных описывается SQL-запросами в конфиге Sphinx.

Например, в проекте интернет-магазина автозапчастей с каталогом 350 тыс. позиций после внедрения Sphinx время поиска сократилось с 8 секунд до 50 мс, а фильтрация по 12 свойствам стала мгновенной. Мы внедрили Sphinx в 30+ проектах на Битрикс с каталогами от 10 тыс. до 500 тыс. позиций. Гарантируем стабильную работу и поддержку после запуска. Свяжитесь с нами — проработаем архитектуру поиска под ваш проект.

Как сконфигурировать источник данных для Sphinx?

Sphinx читает данные через source — SQL-запрос, выполняемый при переиндексации. Пример конфига для каталога товаров:

source bitrix_catalog { type = mysql sql_host = localhost sql_user = bitrix sql_pass = password sql_db = bitrix_db sql_port = 3306 sql_query = \ SELECT \ e.ID, \ e.IBLOCK_ID, \ e.NAME, \ e.DETAIL_TEXT, \ e.CODE, \ UNIX_TIMESTAMP(e.TIMESTAMP_X) AS updated_at \ FROM b_iblock_element e \ WHERE e.IBLOCK_ID IN (5, 6) \ AND e.ACTIVE = 'Y' \ AND e.WF_STATUS_ID = 1 sql_attr_uint = IBLOCK_ID sql_attr_uint = updated_at sql_field_string = NAME } 

sql_attr_uint объявляет числовые атрибуты для фильтрации, sql_field_string — строковое поле для поиска и вывода. Sphinx поддерживает до сотен атрибутов без потери производительности.

Подключение свойств товаров для фасетной фильтрации

Для фасетной фильтрации добавляем свойства через sql_attr_multi:

sql_attr_multi = uint PROPERTY_COLOR FROM query; \ SELECT e.ID, p.VALUE_NUM \ FROM b_iblock_element e \ JOIN b_iblock_element_prop_s5 p ON p.IBLOCK_ELEMENT_ID = e.ID \ WHERE e.IBLOCK_ID = 5 

Таблица b_iblock_element_prop_s5 соответствует инфоблоку ID 5. Это особенность Битрикс: каждому инфоблоку — своя таблица свойств. В сложных проектах мы объединяем несколько таблиц через UNION. Также можно индексировать множественные свойства через sql_attr_multi с разделителями, что позволяет реализовать фильтр по нескольким значениям одновременно.

Как настроить русскую морфологию?

Sphinx поддерживает русский язык через встроенный стеммер. Конфигурация индекса:

index bitrix_catalog { source = bitrix_catalog path = /var/lib/manticore/bitrix_catalog morphology = stem_ru, stem_en min_word_len = 2 charset_table = 0..9, A..Z->a..z, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F min_prefix_len = 3 } 

min_prefix_len = 3 включает prefix-поиск: «ноут» → «ноутбук». Увеличивает индекс, но мы всегда оптимизируем под ваш объём данных. Для больших каталогов (более 300 тыс.) рекомендуем отказаться от prefix и использовать инфиксный поиск. Настройка charset_table обеспечивает корректную обработку кириллицы и регистронезависимость.

PHP-клиент и запросы из Битрикс

Sphinx использует протокол MySQL, поэтому обращаемся через PDO:

$sphinx = new PDO('mysql:host=127.0.0.1;port=9306', '', ''); $stmt = $sphinx->prepare( "SELECT id, weight() as w, NAME FROM bitrix_catalog WHERE MATCH(:query) AND IBLOCK_ID = :iblock ORDER BY w DESC LIMIT :offset, :limit OPTION max_matches=1000" ); $stmt->execute([ ':query' => $searchQuery, ':iblock' => CATALOG_IBLOCK_ID, ':offset' => ($page - 1) * $pageSize, ':limit' => $pageSize, ]); $ids = array_column($stmt->fetchAll(), 'id'); 

Получив $ids, загружаем полные данные через CIBlockElement::GetList(). Это стандартный паттерн, который мы используем во всех проектах. Для ускорения можно кэшировать ID результата на 5–10 минут. При большом количестве запросов рекомендуем пул соединений PDO.

Как настроить delta-индексацию для актуальных данных?

Полная переиндексация (indexer --all) — для ночных крон-задач. Delta-индекс — индексирует только изменённые записи с последней индексации. Требуется поле updated_at и отдельный источник:

source bitrix_catalog_delta : bitrix_catalog { sql_query = \ SELECT e.ID, ... \ FROM b_iblock_element e \ WHERE UNIX_TIMESTAMP(e.TIMESTAMP_X) > (SELECT max_doc_date FROM sph_counter WHERE id=1) } 

Объединение: indexer --merge bitrix_catalog bitrix_catalog_delta. Delta-индексация выполняется каждые 5–10 минут через крон. Мы также настраиваем sph_counter для корректного отслеживания времени последней индексации. При сбоях крон-задач автоматически запускается полная переиндексация.

Почему Sphinx, а не Elasticsearch?

Sphinx в 2-3 раза быстрее индексирует данные из MySQL на серверах с 2 CPU и 4 GB RAM. Сравнение для типового каталога Битрикс:

Критерий Sphinx (Manticore) Elasticsearch
Потребление памяти (каталог 200 тыс. элементов) ~300 MB ~1.5 GB
Время первичной индексации 15-20 мин 40-60 мин
Сложность настройки Один конфиг Кластер, плагины
Поддержка русской морфологии Встроенная Требует анализатор
Горизонтальное масштабирование Нет (ОЗУ+диск) Да (кластер)

Выбирайте Sphinx, если сервер < 4 GB RAM и данные только из MySQL. Elasticsearch подойдёт для кластеров и агрегаций в реальном времени. В 80% наших проектов для Битрикс используем именно Sphinx. Подробнее о Sphinx читайте в Wikipedia.

Какие типичные ошибки возникают при настройке Sphinx?

Самая частая — неправильная charset_table: если кириллица не указана, поиск по русским словам возвращает пустой результат. Вторая по частоте — отсутствие sql_attr_multi для свойств: фасетная фильтрация перестаёт работать. Третья — слишком большой min_prefix_len: при каталоге >500 тыс. позиций индекс вырастает в 2-3 раза, и время индексации увеличивается. Мы в каждом проекте проводим аудит конфигурации и нагрузочное тестирование, чтобы исключить эти проблемы.

Что входит в интеграцию

  • Анализ структуры каталога и требований к поиску
  • Развёртывание Sphinx (Manticore) на сервере
  • Конфигурация источников данных (инфоблоки, свойства, hl-блоки)
  • Настройка индексов с морфологией и prefix-поиском
  • Разработка PHP-шлюза для запросов из Битрикс
  • Интеграция с компонентом каталога (фасетный поиск, фильтр)
  • Реализация delta-индексации (актуальность данных)
  • Тестирование на тестовой нагрузке
  • Документация и обучение администратора
  • Гарантия 12 месяцев на все работы

Сроки и стоимость

Масштаб Состав Срок
Базовый Установка, конфиг, индексатор, поисковый шлюз 3–5 дней
Полный Delta-индексация, фасетный поиск, интеграция с фильтром каталога 7–10 дней

Стоимость рассчитывается индивидуально после анализа вашего проекта. Оценим объём данных, сложность фасетов и требования к скорости. Закажите интеграцию — получите консультацию по архитектуре поиска. Сертифицированные специалисты с опытом 7+ лет гарантируют стабильную работу и поддержку после запуска.