AACSearch / руководство
YML-фиды Яндекс Маркета
Импортируйте каталог любого размера из YML-фида по URL, файлом или inline в автоматически созданную коллекцию.
Фид в формате Yandex Market Language (YML) — это XML вида <yml_catalog><shop>…<offers>, который
уже выгружает большинство российских интернет-магазинов. AACSearch превращает каждый <offer> в документ
и сохраняет дерево категорий, поэтому для первого поиска по товарам достаточно URL фида.
Во что превращается оффер
| Поле | Тип | Источник |
|---|---|---|
id | string | атрибут id элемента <offer> |
name | string | <name> или <typePrefix> <vendor> <model> |
url, picture, description | string | соответствующие элементы (описание обрезается до 5 000 символов) |
vendor, category, currency | string, фасет | <vendor>, название конечной категории, <currencyId> |
category_path | string[], фасет | названия категорий от корневой до конечной, из <categories> |
price | float | <price> |
available | bool, фасет | атрибут available (по умолчанию true) |
params | object | <param name="…" unit="…"> → { "Цвет": "красный", "Вес": "1.5 кг" } |
Если целевой коллекции не существует, задание создаёт её ровно с этими полями (и
enable_nested_fields для params). Существующая коллекция используется как есть — её схема
должна принимать перечисленные выше поля.
По URL
const job = await client.ingest.createIngestJob({
collection: "products",
source: "yml",
url: "https://shop.example.ru/export/yandex.yml",
});Фид может быть обычным XML или сжатым gzip (.yml.gz или сервер, который сжимает ответ в любом случае)
и объявлять в прологе любую кодировку — фиды в windows-1251 поддерживаются. max_pages к фидам
не применяется: каталог импортируется целиком.
Файлом
Файл фида загружается через uploadIngestFeed — «сырое» тело запроса потоково передаётся в хранилище, до 500 МБ
(с учётом лимита на размер тела запроса вашего тарифа Workers):
aacsearch ingest file ./yandex.yml.gz --collection products --waitВкладка Import → File в консоли принимает .yml, .xml и .gz и делает то же самое.
Фид размером менее 2 МБ также можно передать inline в поле content с source: "yml".
Большие фиды
Фиды размером в сотни мегабайт и с сотнями тысяч офферов — обычное дело, поэтому
задание yml никогда не держит фид в памяти целиком:
- Фид обрабатывается потоково — распаковывается из gzip и декодируется по мере поступления — и сканируется
на наличие полных элементов
<offer>; в памяти находятся только текущий оффер и заголовок фида (<categories>). - Офферы импортируются пакетами по 500, и прогресс сохраняется после каждого пакета.
- Один вызов очереди обрабатывает проход до 20 000 офферов (или четырёх минут), после чего возвращает
задание в очередь. Следующий проход заново читает фид, пропускает уже импортированные
офферы и продолжает работу.
stats.cursor— точка возобновления, аstats.passes— число выполненных проходов; оба значения видны, пока задание находится в статусеprocessing. - При сбое или недоступности поискового движка обработка повторяется с последнего сохранённого курсора. С действием
upsertпо умолчанию повторный импорт пакета безопасен. - Отдельный оффер размером более 2 МБ пропускается с записью об ошибке; задание останавливается после 2 000 000 офферов.
Фид по URL скачивается заново на каждом проходе, поэтому очень большой фид на медленном хосте лучше загрузить
(uploadIngestFeed) — тогда проходы читают его из хранилища внутри Cloudflare. Загруженный файл
удаляется, когда задание переходит в статус ready; у неудачного задания файл сохраняется, чтобы retryIngestJob мог прочитать его снова.
Отслеживание задания
let job = await client.ingest.getIngestJob({ jobId: created.id });
while (job.status === "queued" || job.status === "processing") {
await new Promise((r) => setTimeout(r, 2000));
job = await client.ingest.getIngestJob({ jobId: created.id });
}
console.log(job.stats); // { fetched, imported, failed, errors, cursor, passes }stats.errors хранит первые 20 проблем (оффер без id, без названия, дублирующийся
id, документ, отклонённый поисковым движком). Задание получает статус failed, только если не было импортировано
ничего; фид с несколькими некорректными офферами получает статус ready с failed > 0.
Модуль 1С-Битрикс
Установка и подключение модуля aacworkflow.aacsearch, настройки, первая и дельта-выгрузка, компоненты aacsearch, умный фильтр, SEO-страницы фильтра, голосовой поиск, рекомендации и диагностика.
Профили поиска и релизы
Настройте витрину, публикуйте неизменяемые версии и откатывайте их без потери черновика.