AACsearch
Панель и операции

Задачи импорта

История массовых импортов, формат 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 — панель остаётся системой записи.

Связанные страницы

On this page