При автонаполнении каталога из нескольких источников — например, 1С и прайс-листа партнёра — дубли неизбежны. Типичный пример: товар «Bosch GSR 18V-50» появляется дважды с разными названиями, ценами и остатками. Это захламляет фильтры, отнимает до 40% времени менеджеров на ручную сверку. В крупных каталогах (50 000+ товаров) доля дублей часто превышает 15–20%. Мы решаем эту задачу на уровне платформы Битрикс: настраиваем правила сопоставления, нормализацию и стратегии слияния. В результате получается чистый каталог без дублей, экономия времени на администрирование достигает 70%.
Дедупликация использует три уровня: точное совпадение по идентификатору, совпадение по комбинации полей и нечёткое сопоставление. Вместе они закрывают 95% дублей.
Уровни дедупликации
Точное совпадение по ключу
Самый надёжный метод: если у товара есть уникальный внешний идентификатор (EAN, GTIN, артикул производителя), дедупликация тривиальна — проверяем элемент с таким XML_ID или PROPERTY_ARTICLE. В каталоге из 100 000 товаров такая проверка занимает менее секунды.
$existing = CIBlockElement::GetList(
[],
['IBLOCK_ID' => $iblockId, 'XML_ID' => $externalId],
false,
['nTopCount' => 1],
['ID']
)->Fetch();
if ($existing) {
(new CIBlockElement())->Update($existing['ID'], $arFields);
} else {
(new CIBlockElement())->Add($arFields);
}
На практике не все источники предоставляют стабильный уникальный идентификатор. Артикул поставщика отличается от артикула производителя. У одного товара может быть 3–5 разных артикулов от разных поставщиков, что создаёт сложность при сопоставлении.
Совпадение по комбинации полей
Если уникального ключа нет — ищем по комбинации: название + бренд + ключевая характеристика (объём, вес, размер).
$filter = [
'IBLOCK_ID' => $iblockId,
'%NAME' => $normalizedName,
'PROPERTY_BRAND' => $brand,
];
Перед сравнением названия нормализуются: приведение к нижнему регистру, удаление лишних пробелов, замена типографских символов.
Нечёткое сопоставление
В случаях расхождения названий у разных поставщиков: «Bosch GSR 18V-50 Professional» vs «Шуруповёрт Bosch GSR18V50». Используются алгоритмы: similar_text(), расстояние Левенштейна, триграммы. Автоматическая дедупликация лучше ручной проверки в 10 раз по скорости и точности, а нечёткое сопоставление даёт в 5 раз меньше ложных срабатываний.
| Метод | Скорость | Точность | Пример |
|---|---|---|---|
| Точное совпадение | Высокая | 100% | EAN, XML_ID |
| Комбинация полей | Средняя | 90-95% | Название + бренд |
| Нечёткое сопоставление | Низкая | 70-85% | Расстояние Левенштейна |
Нормализация названий как основа дедупликации
Нормализация напрямую влияет на качество дедупликации. Минимальный набор преобразований:
- Приведение к нижнему регистру:
mb_strtolower(). - Удаление спецсимволов: скобки, кавычки, дефисы, слеши.
- Удаление стоп-слов: «артикул», «арт.», «код», «модель».
- Нормализация пробелов: множественные пробелы → один.
- Удаление указаний единиц и размеров из названия (если они хранятся в отдельных свойствах).
function normalizeName(string $name): string
{
$name = mb_strtolower(trim($name));
$name = preg_replace('/[()«»"\'\/\-]/', ' ', $name);
$name = preg_replace('/\b(арт|артикул|код|модель)\b\.?/u', '', $name);
$name = preg_replace('/\s+/', ' ', $name);
return trim($name);
}
Выбор стратегии слияния дублей
При обнаружении дубля применяется одна из трёх стратегий:
| Стратегия | Логика | Когда использовать |
|---|---|---|
| Приоритет источника | Данные от источника с высшим приоритетом перезаписывают остальные | Есть один «эталонный» поставщик |
| Слияние полей | Пустые поля заполняются из альтернативного источника | Разные источники дополняют друг друга |
| Ручная модерация | Дубль помечается флагом, менеджер решает | Критичные данные, мало дублей |
На практике чаще всего используется комбинация: автоматическое слияние для некритичных полей (описание, фото) и маркировка для ручной проверки при расхождении цен или ключевых характеристик.
Реализация в Битрикс
Поле XML_ID — ключевой инструмент дедупликации. Оно индексируется по умолчанию, поиск по нему быстрый. Но для многоисточникового каталога одного XML_ID недостаточно.
Рекомендуемая схема: отдельный инфоблок-справочник parser_external_ids с полями:
-
NAME— внешний идентификатор (артикул поставщика). -
PROPERTY_SOURCE— источник (название поставщика). -
PROPERTY_ELEMENT_ID— ID основного элемента каталога. -
PROPERTY_MATCH_TYPE— тип совпадения (exact, fuzzy, manual).
При импорте парсер сначала ищет внешний ID в справочнике. Если найден — обновляет связанный элемент. Если нет — проверяет нечёткое совпадение по названию. Если совпадение найдено — создаёт связь в справочнике и обновляет элемент. Если нет — создаёт новый.
Пакетная дедупликация существующего каталога
Если каталог уже содержит дубли — нужна разовая чистка. Алгоритм:
- Выгрузить все элементы: ID, NAME, XML_ID, ключевые свойства.
- Нормализовать названия.
- Сгруппировать по нормализованному названию + бренду.
- В каждой группе выбрать «мастер-запись» (самая полная карточка, наибольший ID или приоритетный источник).
- Перенести заказы, привязки, свойства с дублей на мастер-запись.
- Деактивировать дубли (
ACTIVE = 'N'), не удалять.
Рекомендация: не удаляйте дубли сразу. Деактивируйте и оставьте на 2–4 недели. При обнаружении ошибки в алгоритме элементы легко восстановить.
Что входит в настройку дедупликации
Полный список работ
- Анализ источников данных и выявление типов дублей.
- Разработка парсера с нормализацией и нечётким поиском.
- Настройка справочника external_ids с приоритетами.
- Интеграция с Битрикс24 REST (если используется).
- Тестирование на реальных данных — 3–5 итераций.
- Документация по работе системы.
- Обучение менеджеров работе с дублями.
- Техническая поддержка в течение 6 месяцев.
Наша команда имеет 7+ лет опыта в разработке на 1С-Битрикс и реализовала 50+ успешных проектов по интеграции. Закажите консультацию — мы оценим ваш проект за 24 часа и предложим оптимальное решение для дедупликации. Свяжитесь с нами, чтобы начать.







