Автоматический маппинг характеристик товаров в фильтры сайта

Поставщики называют одни и те же характеристики по-разному: «цвет», «Цвет изделия», «color», «Colour», «RAL». На сайте — один фильтр «Цвет». Ручное приведение характеристик от десятков поставщиков к фильтрам сайта — это сотни часов работы, которые нужно автоматизировать. Мы разрабатываем систему мап

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Автоматический маппинг характеристик товаров в фильтры сайта
Сложный
~5 дней

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

Часто задаваемые вопросы

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1422
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    984
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1249
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    986
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    1000

Поставщики называют одни и те же характеристики по-разному: «цвет», «Цвет изделия», «color», «Colour», «RAL». На сайте — один фильтр «Цвет». Ручное приведение характеристик от десятков поставщиков к фильтрам сайта — это сотни часов работы, которые нужно автоматизировать. Мы разрабатываем систему маппинга под ключ: вы загружаете прайсы, а мы настраиваем словари, алгоритмы нормализации и интеграцию с фасетным поиском. Экономия бюджета на каждом поставщике — от 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 выполняет два шага:

  1. Определяет внутренний ключ атрибута (color, spec_weight_kg) по имени от поставщика.
  2. Подбирает нормализованное значение — либо из словаря, либо через автонормализатор.
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 показываем варианты. Оператор одним кликом подтверждает — и на следующий импорт значение уже маппится автоматически. Это избавляет от ручного поиска по каталогу.

Что входит в работу?

  1. Проектирование структуры таблиц маппинга и нормализации.
  2. Разработка алгоритмов (словарный маппинг, автонормализация, fuzzy-поиск).
  3. Интеграция с фасетным поиском: запись значений в product_filter_values и настройка индексов.
  4. Административный интерфейс для управления маппингом и очередью нераспознанных атрибутов.
  5. Документация по расширению словарей и нормализаторов.
  6. Обучение операторов работе с системой.

Сроки реализации

Этап Сроки
Базовый маппинг имён атрибутов + запись в фильтры 3 дня
Автонормализация числовых значений +1 день
Fuzzy-предложения + очередь нераспознанных + admin UI +2–3 дня
Полная интеграция с фасетным поиском и пересчёт при изменении маппинга +1–2 дня

Итоговый срок — от 3 до 9 дней в зависимости от количества поставщиков и сложности справочников. Стоимость базового внедрения — от 15 000 рублей, полный проект — от 50 000 рублей. Получите консультацию: мы оценим ваш проект за один день. Закажите демонстрацию на ваших данных — оцените экономию.

Типичные ошибки при маппинге

  • Игнорирование контекста поставщика. Если один поставщик называет «длина» габарит, а другой — характеристику, то универсальный маппинг сломает фильтрацию. Всегда используем supplier_id.
  • Отсутствие нормализации единиц. Смешивание кг и граммов в одном фильтре делает его бесполезным. Мы настраиваем автонормализацию под ваш ассортимент.
  • Забывают про новые значения. Без очереди нераспознанных атрибутов вы будете терять товары из фильтрации. Наша система накапливает статистику и подсвечивает частые пропуски.
  • Отсутствие пересчёта фильтров при изменении маппинга. Если не обновлять product_filter_values, поиск будет выдавать некорректные результаты. Мы автоматизируем пересчёт при каждом изменении.

Свяжитесь с нами — покажем, как система работает на ваших данных, и вы убедитесь в её эффективности. Гарантируем результат.