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

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Оптимизация переиндексации Elasticsearch для 1С-Битрикс
Средний
~1-2 недели
Часто задаваемые вопросы

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

Этапы разработки

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1321
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    914
  • 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
    663
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    810
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    709
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1043

Оптимизация переиндексации 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 рабочих дней в зависимости от сложности каталога и текущих настроек. Точные сроки определяем после аудита. Экономия ресурсов сервера и снижение затрат на инфраструктуру окупают вложения в течение нескольких месяцев.