Задачи импорта
История массовых импортов, формат JSONL, обработка ошибок и связь импорта с буфером ингеста и квотой.
Страница Import Jobs по адресу /[orgSlug]/import-jobs показывает каждую массовую операцию импорта по всем индексам организации. Используйте её для отслеживания текущих импортов, разбора сбоев и аудита перемещения данных.
Когда создаются задачи импорта
Задача создаётся при любой массовой загрузке документов вне обычной дельт-синхронизации Connector API. Источники:
- Вкладка Indexes → row actions → Import Documents — JSONL-загрузка из панели.
- v1 REST
POST /api/v1/indexes/{indexId}/documents:batch— серверный батч-ингест. - Полная синхронизация коннектора — когда CMS-модуль запускает свежую full-sync (инкрементальные дельты задач не создают; они идут через буфер ингеста).
Одиночные записи через публичный эндпоинт ингеста — не задачи импорта; они идут через SearchIngestBuffer и воркер.
Формат JSONL-нагрузки
Импорт принимает файл JSONL (один JSON-объект на строку). Объект должен соответствовать схеме индекса.
{"external_id":"sku-1","title":"Льняная рубашка","price":4900,"in_stock":true}
{"external_id":"sku-2","title":"Хлопковая футболка","price":1900,"in_stock":false}
{"external_id":"sku-3","title":"Шерстяной свитер","price":7900,"in_stock":true}Правила:
- Один JSON-объект на строку. Пустые строки игнорируются.
- В каждой строке обязательно поле
external_id(string) — стабильный ключ upsert. - Остальные поля должны соответствовать схеме индекса. Неизвестные поля отклоняются построчно.
- Максимальный размер файла: 100 МБ. Делите бо́льшие импорты на несколько файлов.
- Максимум строк на файл: 1 000 000. Лишние не обрабатываются.
Жизненный цикл задачи и статусы
| Статус | Значение |
|---|---|
pending | В очереди, воркер ещё не взял в работу |
running | Воркер обрабатывает батчи |
completed | Все строки обработаны (часть могла упасть — смотрите счётчик ошибок) |
failed | Задача прервалась до завершения (невалидный файл, блокировка по квоте) |
canceled | Оператор отменил задачу из row actions |
Каждая строка в списке показывает:
- ID задачи и источник (UI / API / коннектор)
- Имя и слаг индекса
- Статус (цветной бейдж)
- Всего обработано строк
- Количество ошибок (с действием View errors)
- Время старта / финиша / длительность
- Инициатор (пользователь или имя токена коннектора)
Обработка ошибок
Ошибки фиксируются построчно, не на уровне задачи. Задача с 1000 строк и 7 невалидных рядов получает статус completed и 7 в столбце Failures. Кнопка View errors покажет первые 100 строк-ошибок:
- Номер строки
- Сырое содержимое строки (обрезано до 200 символов)
- Код ошибки (
validation_error,schema_mismatch,duplicate_external_id, …) - Читаемое описание
Сверх первых 100 ошибки только считаются, но не сохраняются — чтобы payload оставался компактным.
Частые коды ошибок
| Код | Причина | Как исправить |
|---|---|---|
invalid_json | Строка не является валидным JSON | Проверьте файл jq -c . file.jsonl перед загрузкой |
missing_external_id | В строке нет external_id | Добавьте external_id в каждый ряд |
validation_error | Значение поля не проходит проверку типа (например, цена строкой) | Приведите значения к типам схемы |
schema_mismatch | Поле есть в строке, но не в схеме индекса | Добавьте поле в схему или уберите из выгрузки |
duplicate_external_id | Две строки делят один external_id в файле | Дедуплицируйте перед загрузкой — поздние строки молча перезапишут ранние, если оба прошли |
quota_exceeded | Импорт превысит месячный лимит индексируемых документов | Обновите план или дождитесь следующего периода — см. Планы и лимиты |
index_not_found | Целевой индекс был удалён, пока задача стояла в очереди | Пересоздайте индекс и перезапустите импорт |
Как импорт влияет на квоту
Каждая успешно обработанная строка тратит один search unit из бюджета indexed_documents. Ошибочные строки не тратят. Pre-flight проверка воркера отклоняет всю задачу с quota_exceeded, если строки превысят месячный потолок; частичные импорты не выполняются.
Определения единиц — в Планы и лимиты и Биллинг → Единицы потребления.
Когда импорт становится поисковым
Для инкрементального импорта (дельта-синк) обработанные строки идут через SearchIngestBuffer и попадают в боевой alias как только батч завершён — задержка обычно секунды.
Для полного реиндекса (источник connector_full_sync или manual_reindex) воркер пишет в новый версионированный индекс ({orgShortId}_{slug}_v{n+1}) и атомарно переключает alias после верификации. Старая версия живёт до момента переключения — без даунтайма, без полузаписанного состояния.
См. Управление индексами → Реиндекс.
Отмена задачи
Задачу в статусе running можно отменить из row actions. Отмена кооперативна: воркер перестаёт брать новые батчи, но текущие in-flight батчи доходят до конца. Уже записанные документы остаются в индексе. Статус задачи становится canceled с пометкой Stopped at line N.
Возобновить отменённую задачу нельзя — повторно загрузите оставшиеся строки.
Retention
Записи задач хранятся 90 дней. Затем строка задачи soft-удаляется (deletedAt), а payload построчных ошибок очищается. Сами документы остаются в индексе вне зависимости от retention задач.
Аудит-трейл
Каждая задача оставляет событие в аудите — это даёт историю поверх 90-дневного retention:
| Действие | Когда |
|---|---|
sync_connector | Полная синхронизация коннектора стартовала/завершилась |
update_schema | Импорты, вызвавшие автоматическое изменение схемы |
См. Журналы аудита — фильтры и экспорт.
Альтернативы: CLI и API
Для повторяемых импортов предпочтительнее v1 REST, а не панель:
curl -X POST https://app.aacsearch.com/api/v1/indexes/{indexId}/documents:batch \
-H "Authorization: Bearer $AACSEARCH_ADMIN_KEY" \
-H "Content-Type: application/x-ndjson" \
--data-binary @products.jsonlЭто обходит ограничение на размер файла в браузере и интегрируется с CI. Каждый батч-вызов всё равно создаёт строку Import Job — панель остаётся системой записи.
Связанные страницы
- Рабочее пространство поиска — Индексы, Песочница, API-ключи, Виджет.
- Управление индексами — схема, реиндекс, история синков.
- Планы и лимиты — потолки индексируемых документов и поведение overage.
- Коннекторы → Обзор — full-sync vs delta-sync, когда какой путь.
- Журналы аудита — история сверх 90-дневного retention задач.