Группировка SKU и варианты
В фидах одежды/обуви один товар обычно представлен несколькими офферами — по одному на каждый размер/цвет. Без группировки поиск по запросу «платье Ривьера» вернёт десяток почти одинаковых карточек. Группировка SKU сворачивает варианты одного товара в одну карточку.
Как варианты связываются: group_id
Варианты одного товара должны нести одинаковый group_id (и, как правило, одинаковые name, url, picture), различаясь размером/цветом:
xml
<offer id="5684" group_id="5652" available="false">
<name>Баска на завышенной талии с кантом</name>
<price>10100</price>
<param name="Размер">XS</param>
</offer>
<offer id="5685" group_id="5652" available="true">
<name>Баска на завышенной талии с кантом</name>
<price>10100</price>
<param name="Размер">S</param>
</offer>Здесь два SKU (5684, 5685) — один товар (group_id=5652).
TIP
Если group_id не указан, он равен id оффера — то есть каждый оффер сам себе группа. Чтобы группировка что-то давала, варианты обязаны делить общий group_id. Именно так организованы варианты в типичном фиде одежды.
Включение группировки
Группировка настраивается на уровне проекта (sku_grouping):
- enabled — включить сворачивание вариантов в группы;
- group_by — по какому полю группировать (по умолчанию —
group_id); - include_variants — вкладывать ли в карточку подробный список вариантов.
Когда группировка выключена (по умолчанию), в индекс идёт по документу на каждый SKU.
Что происходит при группировке
Офферы с одинаковым ключом группировки сворачиваются в один групповой документ:
- Представитель — первый SKU группы; его поля берутся за основу карточки.
idиgroup_idдокумента = ключ группы.price_min/price_max— минимальная и максимальная цена среди доступных вариантов (для отображения «от … ₽»); если доступных нет — среди всех.availability— объединение статусов наличия всех вариантов.is_available— есть ли в группе хотя бы один доступный вариант.has_discount— есть ли скидка (старая цена строго выше текущей) хотя бы у одного доступного варианта; если доступных нет — среди всех.has_photo— есть ли изображение у представителя, а не у любого варианта: карточка показывает картинку представителя, и флаг отвечает ровно за то, что видит покупатель.- Фасетные характеристики объединяются только по доступным вариантам: например, если размер
XSраспродан,Размергруппы =["S", "M"]— фильтры предлагают лишь то, что можно купить. У группы без единого доступного варианта фасетных значений нет: такой товар находится текстовым поиском, но не через фильтры. - Характеристики с флагом «агрегировать в группах» (
aggregate_in_groups) сводятся в массивы уникальных значений по всем вариантам — это данные для отображения карточки, а не для фильтров.
group_id=5652
├── SKU 5684 price=10100 Размер=XS (нет в наличии)
├── SKU 5685 price=10100 Размер=S (в наличии)
└── SKU 5686 price=10100 Размер=M (в наличии)
│
▼ групповой документ
id=5652 price_min=10100 price_max=10100 is_available=true
Размер=["S","M"] availability=["out of stock","in stock"]
variants=[ {sku:5684,…}, {sku:5685,…}, {sku:5686,…} ] ← если include_variantsДоступность товаров
Что считается «доступным вариантом», настраивается в личном кабинете проекта (раздел «Доступность товаров»):
- Условие доступности — по умолчанию вариант доступен при
available="true"в фиде. Условие можно расширить характеристиками: например, «в наличии или Предзаказ = Да» — тогда предзаказные варианты тоже попадают в фильтры. - Скрывать недоступные товары — если включено, товары без единого доступного варианта полностью исчезают из выдачи (а не только из фильтров).
Изменение настроек доступности автоматически запускает переимпорт фида — новое поведение видно после его завершения.
Массив variants
При include_variants = true в групповой документ добавляется массив variants — по элементу на SKU, с сохранением того, что группировка «схлопнула»:
json
{
"sku": "5685",
"availability": "in stock",
"price": 10100,
"url": "https://.../product/baska-.../",
"image_url": "https://.../105b68.jpg",
"images": ["https://.../105b68.jpg"],
"properties": { "Размер": "S", "Цвет": "белый" }
}Это нужно витрине, чтобы показать выбор размера/цвета прямо в карточке и знать цену/наличие/картинку каждого конкретного варианта. При include_variants = false массив variants пуст.
Рекомендации по фиду для группировки
- Проставляйте стабильный общий
group_idвсем вариантам товара. - Держите одинаковыми
name/url/pictureу вариантов (карточку строит представитель). - Выносите различающий вариант атрибут (
Размер,Цвет) в<param>и включайте для него «фасет» и/или «агрегировать в группах». - Корректно указывайте
availableна каждом SKU — из них собирается наличие группы, статусы отдельных вариантов и состав фильтров.