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

Поставщики называют одни и те же характеристики по-разному, из-за чего фильтры на сайте перестают работать корректно. Мы разрабатываем систему автоматического маппинга, которая приводит данные к единому виду и настраивает интеграцию с фасетным поиском. Реализуем проект под ключ — от аудита и словарей до внедрения и последующей поддержки.

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

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

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

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

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

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

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

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

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

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

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1141
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1060