Постачальники називають одні й ті ж характеристики по-різному: «колір», «Колір виробу», «color», «Colour», «RAL». На сайті — один фільтр «Колір». Ручне приведення характеристик від десятків постачальників до фільтрів товарів — це сотні годин роботи, які потрібно автоматизувати. Ми маємо 5+ років досвіду в розробці систем мапінгу та успішно реалізували понад 30 проектів з автоматизації каталогів. Ми розробляємо систему мапінгу під ключ: ви завантажуєте прайси, а ми налаштовуємо словники, алгоритми нормалізації та інтеграцію з фасетним пошуком. Економія бюджету на кожному постачальнику — від 30 000 грн на рік. Час обробки одного постачальника скорочується з 40 годин до 2–3 годин, що в 10–20 разів швидше. При 20 постачальниках ви економите понад 700 годин на рік, які можна спрямувати на розвиток каталогу. Використовуємо PostgreSQL з розширенням pg_trgm для нечіткого пошуку та черги для нерозпізнаних значень. Зв'яжіться з нами — ми продемонструємо систему на ваших даних.
Архітектура автоматичного мапінгу характеристик у фільтри сайту
Три рівні абстракції:
Характеристика постачальника → Атрибут сайту → Значення фільтра "Колір виробу: Червоний" → color → "Червоний" "color: Red" → color → "Червоний" (з нормалізацією значення) "RAL 3020" → color → "Червоний" (через довідник RAL) Таблиці мапінгу — attribute_name_mapping (ім'я атрибута) та attribute_value_mapping (значення). Обидві підтримують пріоритет: спочатку мапінг для конкретного постачальника, потім універсальний. Це дозволяє налаштовувати винятки для окремих постачальників. Таблиця product_filter_values зберігає денормалізовані дані з індексами, забезпечуючи швидку фасетну фільтрацію. При зміні мапінгу дані перераховуються через artisan-команду.
Алгоритм автоматичного зіставлення атрибутів
Основний клас AttributeMapper виконує два кроки:
- Визначає внутрішній ключ атрибута (
color,spec_weight_kg) за іменем від постачальника. - Підбирає нормалізоване значення — або зі словника, або через автонормалізатор.
class AttributeMapper { public function mapAttribute( string $supplierName, string $supplierValue, ?int $supplierId = null ): ?MappedAttribute { // Крок 1: знайти мапінг імені атрибута $siteAttribute = $this->resolveAttributeName($supplierName, $supplierId); if (!$siteAttribute) { $this->logUnknownAttribute($supplierName, $supplierId); return null; } // Крок 2: знайти мапінг значення $siteValue = $this->resolveAttributeValue($siteAttribute, $supplierValue, $supplierId); if (!$siteValue) { // Пробуємо нормалізувати без мапінгу $siteValue = $this->autoNormalizeValue($siteAttribute, $supplierValue); } return new MappedAttribute($siteAttribute, $siteValue); } private function resolveAttributeName(string $name, ?int $supplierId): ?string { $normalized = mb_strtolower(trim($name)); // Спочатку специфічний мапінг для постачальника if ($supplierId) { $mapping = AttributeNameMapping::where([ 'supplier_id' => $supplierId, 'supplier_name' => $normalized, ])->value('site_attribute'); if ($mapping) return $mapping; } // Потім універсальний return AttributeNameMapping::whereNull('supplier_id') ->where('supplier_name', $normalized) ->value('site_attribute'); } } Автоматична нормалізація значень характеристик
Числові характеристики (вага, габарити, напруга) нормалізуються без словників: «2,5 кг» → 2.5, «1000 г» → 1.0. Рядкові значення зазвичай приводяться до нижнього регістру або до першого заголовного (якщо це не назва бренду). Для кольорів використовується довідник RAL — його ми інтегруємо на етапі налаштування.
private function autoNormalizeValue(string $attribute, string $raw): string { return match ($attribute) { 'spec_weight_kg' => $this->parseWeight($raw), 'spec_dimensions' => $this->parseDimensions($raw), 'spec_voltage' => $this->parseVoltage($raw), default => $this->capitalizeFirst($raw), }; } private function parseWeight(string $raw): string { // "2,5 кг" | "2500 г" | "2.5kg" → "2.5" if (preg_match('/(\d+[.,]\d+|\d+)\s*г(?:рам)?/iu', $raw, $m)) { return (string) (((float) str_replace(',', '.', $m[1])) / 1000); } if (preg_match('/(\d+[.,]\d+|\d+)\s*кг/iu', $raw, $m)) { return str_replace(',', '.', $m[1]); } return $raw; } | Вихідне значення | Атрибут | Результат |
|---|---|---|
| 2,5 кг | spec_weight_kg | 2.5 |
| 2500 г | spec_weight_kg | 2.5 |
| Red | color | червоний |
| RAL 3020 | color | Червоний |
Приклад мапінгу для постачальника "ТехноКом": Вихідні дані: "Колір: Red", "Вага: 2.5 kg". Мапінг: "Колір" -> color, "Red" -> Червоний; "Вага" -> spec_weight_kg, "2.5 kg" -> 2.5. Результат: товар відображається у фільтрі "Колір: Червоний" та "Вага: 2.5". Автоматичне зіставлення атрибутів відбувається за допомогою словників. Словник мапінгу зберігає відповідності між назвами постачальників та атрибутами сайту.
Чому fuzzy-пошук важливий для нових значень?
Зазначимо: коли в прайсі з'являється «Красн.», а в словнику тільки «Червоний», система пропонує оператору створити мапінг на основі схожості рядків. Використовуємо функцію similarity з модуля pg_trgm. При порозі >0.6 показуємо варіанти. Оператор одним кліком підтверджує — і на наступний імпорт значення вже мапиться автоматично. Це позбавляє ручного пошуку по каталогу.
Що входить в роботу?
- Проектування структури таблиць мапінгу та нормалізації.
- Розробка алгоритмів (словниковий мапінг, автонормалізація, fuzzy-пошук).
- Інтеграція з фасетним пошуком: запис значень у
product_filter_valuesта налаштування індексів. - Адміністративний інтерфейс для керування мапінгом та чергою нерозпізнаних атрибутів.
- Документація з розширення словників та нормалізаторів.
- Навчання операторів роботі з системою.
Терміни реалізації
| Етап | Терміни |
|---|---|
| Базовий мапінг імен атрибутів + запис у фільтри | 3 дні |
| Автонормалізація числових значень | +1 день |
| Fuzzy-пропозиції + черга нерозпізнаних + admin UI | +2–3 дні |
| Повна інтеграція з фасетним пошуком і перерахунок при зміні мапінгу | +1–2 дні |
Підсумковий термін — від 3 до 9 днів залежно від кількості постачальників та складності довідників. Вартість базового впровадження — від 15 000 грн, повний проект — від 50 000 грн. Отримайте консультацію: ми оцінимо ваш проект за один день. Замовте демонстрацію на ваших даних — оцініть економію.
Типові помилки при мапінгу
- Ігнорування контексту постачальника. Якщо один постачальник називає «довжина» габарит, а інший — характеристику, то універсальний мапінг зламає фільтрацію. Завжди використовуємо supplier_id.
- Відсутність нормалізації одиниць. Змішування кг і грамів в одному фільтрі робить його марним. Ми налаштовуємо автонормалізацію під ваш асортимент.
- Забувають про нові значення. Без черги нерозпізнаних атрибутів ви будете втрачати товари з фільтрації. Наша система накопичує статистику та підсвічує часті пропуски.
- Відсутність перерахунку фільтрів при зміні мапінгу. Якщо не оновлювати
product_filter_values, пошук буде видавати некоректні результати. Ми автоматизуємо перерахунок при кожній зміні.
Зв'яжіться з нами — покажемо, як система працює на ваших даних, і ви переконаєтеся в її ефективності. Гарантуємо результат.







