Як прискорити пошук у 1С-Бітрікс: повний гайд з індексації

Коли пошук у 1С-Бітрікс починає гальмувати? Вбудований пошук 1С-Бітрікс використовує таблиці `b_search_content`, `b_search_content_stem`, `b_search_stem`. На каталозі з 30 000 товарів повна переіндексація займає 4–12 годин, агент `CSearchIndex::IndexAgent` крутиться безперервно, а якість пошуку з
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Як прискорити пошук у 1С-Бітрікс: повний гайд з індексації
Середній
~1-2 тижні

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

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1454
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1017
  • 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
    759
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    879
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    802
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1161

Коли пошук у 1С-Бітрікс починає гальмувати?

Вбудований пошук 1С-Бітрікс використовує таблиці b_search_content, b_search_content_stem, b_search_stem. На каталозі з 30 000 товарів повна переіндексація займає 4–12 годин, агент CSearchIndex::IndexAgent крутиться безперервно, а якість пошуку залишається низькою: стемінг не справляється з морфологією, релевантність не враховує продажі. Наш досвід показує, що грамотне налаштування скорочує час індексації на 50–80% і підвищує точність видачі на 30–40%. Ми працюємо з Бітрікс більше 10 років і гарантуємо результат. Проблема посилюється, якщо на сайті одночасно активні кілька модулів — кожен зайвий модуль додає 15–20% обсягу індексних таблиць. Типова картина: адміністратор вмикає пошук по форумах, блогах і документах, хоча користувачам потрібен лише каталог товарів. У результаті індекс роздувається, запити сповільнюються, а агент не встигає обробляти зміни.

Діагностика поточної індексації

Першим ділом дивимося стан індексних таблиць:

SELECT table_name, ROUND(data_length / 1024 / 1024, 2) AS data_mb, ROUND(index_length / 1024 / 1024, 2) AS index_mb, table_rows FROM information_schema.TABLES WHERE table_schema = DATABASE() AND table_name LIKE 'b_search%' ORDER BY data_length DESC; 

Таблиця b_search_content_stem на великому порталі може займати 2–5 ГБ. OPTIMIZE TABLE для неї блокує запити на години — робимо тільки в технічне вікно.

Як налаштувати параметри індексації?

В адміністративному інтерфейсі (Налаштування → Пошук → Налаштування) міняємо ключові параметри:

  1. Мінімальна довжина слова — збільшуємо з 2 до 3–4. Двобуквенні слова засмічують індекс і не несуть пошукового сенсу.
  2. Стоп-слова — додаємо прийменники, сполучники, артиклі. Для україномовного сайту базовий список включає 50–80 слів.
  3. Модулі, що індексуються — вимикаємо модулі, пошук за якими не потрібен користувачам (форуми, блоги, документообіг).
  4. Кількість елементів за один прохід агента — оптимально 50–100.
// У налаштуваннях модуля пошуку або через агент CSearch::ReIndex($moduleId, $start, $finish, $step = 50); 

Інкрементальна vs повна індексація

Повна переіндексація (ReIndexAll) — тільки при первинному налаштуванні або після серйозних змін структури каталогу. У робочому режимі має працювати інкрементальна індексація через агент. Проблема: агент CSearchIndex::IndexAgent спрацьовує на будь-яку зміну DATE_CHANGE. При синхронізації з 1С дата змінюється навіть якщо контент не змінився — агент фактично переіндексує весь каталог щоразу. Рішення: порівнюємо хеш значущих полів до та після оновлення. Оновлюємо DATE_CHANGE тільки при реальній зміні:

$oldHash = md5($oldElement['NAME'] . $oldElement['DETAIL_TEXT'] . implode(',', $oldProperties)); $newHash = md5($newElement['NAME'] . $newElement['DETAIL_TEXT'] . implode(',', $newProperties)); if ($oldHash !== $newHash) { // Оновлюємо зі зміною DATE_CHANGE } else { // Оновлюємо залишки/ціни без тригера переіндексації $DB->Query("UPDATE b_iblock_element SET TIMESTAMP_X = TIMESTAMP_X WHERE ID = {$id}"); } 

MySQL FULLTEXT vs Elasticsearch: що обрати?

Параметр MySQL FULLTEXT (вбудований) Elasticsearch (через модуль)
Швидкість на 30 000 товарів 0.5–2 сек 0.1–0.3 сек
Морфологія мови Базова (стемінг) Повноцінна (морфологія)
Фасетний пошук Не підтримується Підтримується
Складність налаштування Низька Середня
Витрати ресурсів сервера Низькі Вимагає окремого сервера

Якщо каталог до 30 000 позицій і потрібен простий пошук — достатньо оптимізації FULLTEXT. Для 50 000+ і складних фільтрів краще Elasticsearch.

Чистка застарілих записів індексу

На живих сайтах у b_search_content накопичуються записи видалених елементів. Чистимо пакетами по 1000 записів через агент або cron — одним DELETE на 100 000 в прод не працюємо:

-- Знайти записи видалених елементів інфоблоку SELECT sc.ID, sc.PARAM1, sc.PARAM2 FROM b_search_content sc LEFT JOIN b_iblock_element ie ON ie.ID = CAST(sc.PARAM1 AS UNSIGNED) WHERE sc.MODULE_ID = 'iblock' AND ie.ID IS NULL LIMIT 10000; 

Що входить в оптимізацію пошуку?

  • Діагностика поточних індексів і налаштувань модуля пошуку
  • Налаштування стоп-слів, мінімальної довжини слова, виключення зайвих модулів
  • Оптимізація агента інкрементальної індексації (хешування полів)
  • Налаштування MySQL FULLTEXT (my.cnf: innodb_ft_min_token_size, стоп-таблиця)
  • Чистка сміття в індексах
  • Моніторинг нульових запитів (b_search_log)
  • Документація з рекомендаціями та регламентом підтримки

Моніторинг якості пошуку

Після оптимізації налаштовуємо логування запитів з нульовою видачею. Запити з нульовою видачею — сигнал до розширення контенту або переходу на Elasticsearch.

Кейс: скорочення часу індексації в 4 рази

Клієнт — інтернет-магазин автозапчастин (40 000 товарів). Повна індексація тривала 8 годин, агент тримав навантаження CPU 70–90%. Після налаштування інкрементальної індексації з хешуванням та оптимізації FULLTEXT час повного обходу скоротився до 2 годин, навантаження CPU — до 15–20%. Якість пошуку покращилася: кількість нульових запитів знизилася на 35%. Економія бюджету на хмарні ресурси склала близько 400 000 грн на рік.

Типові помилки при налаштуванні пошуку

  • Встановлення мінімальної довжини слова = 1: індекс забивається сміттям, пошук сповільнюється.
  • Повна переіндексація щоночі: зайве навантаження, достатньо інкрементальної.
  • Ігнорування стоп-слів: пошук знаходить статті з прийменниками замість потрібних товарів.
  • Відсутність моніторингу: нульові запити залишаються непоміченими, контент не доповнюється.

Результат

Оптимізація параметрів і стратегії індексування скорочує час повного обходу на 50–80%, знижує навантаження агента до фонового рівня та покращує релевантність видачі. Зв'яжіться з нами, щоб отримати консультацію та план робіт. Замовте аудит пошуку — оцінимо ваш проект за 1 день.