Оптимізація переіндексації Elasticsearch для 1С-Бітрікс

Оптимізація переіндексації Elasticsearch для 1С-Бітрікс На одному з проєктів з каталогом 800 000 SKU повна переіндексація Elasticsearch з 1С-Бітрікс займала 14 годин. За цей час накопичувалася черга змін, пошук віддавав застарілі дані, а імпорт з 1С конкурував з індексацією за ресурси сервера. Бі
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Оптимізація переіндексації Elasticsearch для 1С-Бітрікс
Середній
~1-2 тижні

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

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

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

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

Оптимізація переіндексації Elasticsearch для 1С-Бітрікс

На одному з проєктів з каталогом 800 000 SKU повна переіндексація Elasticsearch з 1С-Бітрікс займала 14 годин. За цей час накопичувалася черга змін, пошук віддавав застарілі дані, а імпорт з 1С конкурував з індексацією за ресурси сервера. Більше того, в процесі індексації при кожному refresh пошук блокувався на частки секунди, що для інтернет-магазину з піковим навантаженням до 10 000 запитів на хвилину призводило до затримок до 3 секунд. Наше завдання — скоротити повну переіндексацію до 1–2 годин без жодної секунди простою пошуку. Досвід роботи з каталогами до 2 млн товарів дозволяє гарантувати такий результат. Подібна ситуація знайома багатьом: чим більший каталог, тим повільніші стандартні механізми. Але рішення лежить на поверхні — правильне налаштування Elasticsearch та оптимізація коду індексатора.

Чому переіндексація гальмує?

Типові причини повільної індексації — послідовна відправка кожного документа окремим PUT-запитом, примусовий refresh після кожного пакета та дефолтний refresh_interval в 1 секунду. Кожен refresh створює новий сегмент Lucene, який потім доводиться об'єднувати. На каталозі в 800k SKU це генерує сотні тисяч дрібних сегментів, і Elasticsearch витрачає ресурси на їх злиття.

Стратегія zero-downtime переіндексації

Ключовий прийом — індексувати в новий індекс, а не поверх робочого. Поточний індекс bitrix_catalog_v1 обслуговує пошук через аліас bitrix_catalog. Паралельно ми будуємо bitrix_catalog_v2. Після завершення переіндексації атомарно перемикаємо аліас — пошук переходить на новий індекс без переривання.

Які налаштування Elasticsearch прискорюють індексацію?

Перед масовою індексацією тимчасово змінюємо параметри:

PUT /bitrix_catalog_v2/_settings { "index": { "refresh_interval": "-1", "number_of_replicas": 0, "translog.durability": "async", "translog.sync_interval": "30s" } } 

Відключення refresh (-1) прискорює індексацію в 3–5 разів, оскільки документи не потрапляють до пошуку до явного виклику. Відключення реплік (number_of_replicas: 0) знижує навантаження на кластер. Асинхронний транслог скидається на диск кожні 30 секунд, а не при кожній операції. Після індексації відновлюємо стандартні налаштування та виконуємо forcemerge для об'єднання сегментів в один.

Як оптимізувати PHP-індексатор?

Використовуємо Bulk API з пакетами по 500 документів (5–15 МБ). Це в 10–20 разів швидше, ніж поодинокі запити. Elasticsearch Bulk API — стандартна практика для масового завантаження.

$batchSize = 500; $bulk = []; foreach ($products as $product) { $bulk[] = ['index' => ['_index' => 'bitrix_catalog_v2', '_id' => $product['ID']]]; $bulk[] = buildDocument($product); if (count($bulk) >= $batchSize * 2) { $client->bulk(['body' => $bulk]); $bulk = []; } } if (!empty($bulk)) { $client->bulk(['body' => $bulk]); } 

Паралельна індексація через кілька процесів — ділимо каталог за діапазонами ID. Три процеси на тринодовому кластері дають лінійне прискорення. Обмеження — швидкість читання з MySQL.

Що дає паралельна індексація?

Використання bulk API та паралельної індексації прискорює індексацію в 10–20 разів порівняно з послідовними поодинокими запитами. На нашому проєкті повна переіндексація скоротилася з 14 годин до 1 години 20 хвилин.

Перемикання аліасу

Після індексації атомарно перемикаємо аліас:

POST /_aliases { "actions": [ { "remove": { "index": "bitrix_catalog_v1", "alias": "bitrix_catalog" } }, { "add": { "index": "bitrix_catalog_v2", "alias": "bitrix_catalog" } } ] } 

Операція займає мілісекунди, пошук не переривається.

Приклад повного сценарію переіндексації
  1. Створити новий індекс з оптимізованими налаштуваннями.
  2. Налаштувати аліас на поточний індекс.
  3. Запустити паралельні процеси індексації з bulk API.
  4. Після завершення перемкнути аліас на новий індекс.
  5. Відновити налаштування (refresh_interval, репліки) та виконати forcemerge.

Порівняння до та після оптимізації

Параметр До оптимізації Після оптимізації
Повна переіндексація (800k SKU) 14 годин 1 год 20 хв
Інкрементальне оновлення 15–20 док/с 200–300 док/с
Простій пошуку Так Ні

Що входить в послугу

  • Аудит поточної конфігурації Elasticsearch та PHP-індексатора
  • Налаштування індексів та mapping під типові запити
  • Оптимізація bulk API та паралельної обробки
  • Реалізація zero-downtime з аліасами
  • Документація з експлуатації
  • Консультація та навчання вашої команди

Вартість послуги розраховується індивідуально після аудиту. Ми дамо точну оцінку протягом 2 робочих днів.

Як ми гарантуємо результат?

Наш досвід — понад 10 років розробки на Бітрікс, понад 50 впроваджень пошуку для каталогів з товарами від 10k до 2M SKU. Для кожного проєкту проводимо навантажувальне тестування та даємо гарантію на швидкість індексації. Elasticsearch — де-факто стандарт для високонавантажених каталогів. Зв'яжіться з нами для оцінки вашого проєкту — ми підготуємо план оптимізації. Замовте послугу оптимізації та отримайте прискорення індексації в 7+ разів.

Скільки часу займає оптимізація?

Зазвичай від 3 до 10 робочих днів залежно від складності каталогу та поточних налаштувань. Точні терміни визначаємо після аудиту. Економія ресурсів сервера та зниження витрат на інфраструктуру окупають вкладення протягом кількох місяців.