AACsearch
Диагностика

Ошибки индексации

Документы отправлены в AACsearch, но не появляются в поиске — диагностика задержки очереди буфера, несоответствия схемы, ошибок валидации и давления переиндексации.

Индексация отделена от индексирования: запись попадает в SearchIngestBuffer, воркер забирает её и применяет к живому индексу. «Сбой» может означать 4xx на границе API, 4xx у воркера или зависшую очередь. Для каждого — своё решение.

Симптомы

Что вы видитеГде проблема
4xx возвращается от sync/full, sync/delta, documents:batchВалидация на границе не пройдена — запрос никогда не попал в очередь
2xx возвращается, но документ не появляется через 2 минутыВоркер отклонил его (схема, тип) или задержка очереди
Некоторые документы появляются, другие нетВалидация по документам; проверьте поле errors[] в ответе
Количество документов застыло после задачиВоркер остановлен или выполняется миграция схемы

Дерево решений

API вернул 2xx?
  ├─ нет  → исправьте тело запроса; см. "Ошибки валидации" ниже
  └─ да  → проверьте глубину очереди буфера
            ├─ глубина 0 → воркер обработал; проверьте соответствие схемы
            └─ глубина > 0 → ждите; см. "Задержка очереди" ниже

Проверка 1: ответ API

Успешная постановка в очередь возвращает { "enqueued": <n>, "errors": [] }. Частичный успех возвращает ошибки по документам:

{
  "enqueued": 998,
  "errors": [
    {
      "external_id": "product-123",
      "error": "validation_failed",
      "message": "Field 'price' expected float, got string"
    },
    {
      "external_id": "product-456",
      "error": "missing_field",
      "message": "Required field 'title' is missing"
    }
  ]
}

Исправьте каждую строку согласно её коду error. Остальные 998 уже на пути к индексу.

Частые ошибки валидации

Код ошибкиЗначениеИсправление
validation_failedТип поля не соответствует схемеПриведите или преобразуйте на стороне коннектора
missing_fieldОбязательное поле отсутствуетДобавьте его; или пометьте как необязательное в схеме индекса
payload_too_largeОдин документ > 1 МБРазделите или обрежьте большие текстовые поля
batch_too_largeПакет > 1000 документовРазделите на несколько пакетов
unknown_field (предупреждение, не сбой)Лишнее поле, отсутствующее в схемеЛибо добавьте в схему, либо удалите на стороне коннектора

Проверка 2: глубина очереди буфера

Если API ответил enqueued: N, но документы не видны через 2 минуты, проверьте очередь:

curl -X GET https://app.aacsearch.com/api/v1/projects/<projectId>/usage \
  -H "Authorization: Bearer aa_admin_..."

Ответ включает bufferDepth для организации. Здоровая глубина — < 1000 большую часть времени. Устойчивая глубина > 50 000 указывает на троттлинг воркера.

ГлубинаЗначение
0Воркер в простое, всё обработано
1–10 000Нормально — типичная задержка < 30 с
10 000–50 000Навёрстывание после всплеска — типичная задержка < 5 мин
> 50 000Воркер затроттлен — см. «Давление» ниже

Проверка 3: несоответствие схемы

Документ может пройти валидацию на границе, но быть отклонён воркером, если тип поля изменился с момента установки схемы индекса. Отклонения воркера отображаются в дашборде:

Поиск → Индексы → индекс → вкладка «Recent ingest errors».

Частые причины:

  • Коннектор начал отправлять новое поле, для которого нет определения фасета/типа.
  • Поле изменилось с string на string[] в источнике.
  • Вложенный объект был сплющен не так, как ожидает схема.

Обновите схему (admin API → PATCH /v1/indexes/<id>) и повторно отправьте затронутые документы.

Проверка 4: выполняется переиндексация

Во время полной переиндексации живой псевдоним подменяется в конце. Пока переиндексация выполняется, новые записи пишутся в обе коллекции — старую и новую. Записи не теряются, но вы можете наблюдать временную задержку.

Проверьте Поиск → Индексы → статус. Если статус reindexing, дождитесь завершения. См. переиндексация и нулевой простой для полного жизненного цикла.

Проверка 5: особенности коннектора

Если вы используете коннектор (PrestaShop, Bitrix, Postgres-sync), проверьте последнюю задачу синхронизации коннектора:

curl -X GET https://app.aacsearch.com/api/v1/projects/<projectId>/sync-jobs \
  -H "Authorization: Bearer aa_admin_..."

Каждая строка имеет статус: pending, running, completed, failed. Упавшие задачи включают базовую ошибку и пример документа, на котором произошёл сбой.

Давление: воркер затроттлен

Если bufferDepth растёт до сотен тысяч и не уменьшается, происходит одно из следующего:

ПричинаИсправление
Достигнут потолок конкурентности уровня тарифаОбновить тариф или обратиться в поддержку для повышения количества воркеров на организацию
Вышестоящий поисковый движок медленныйПроверить страницу статуса; обратиться в поддержку, если наша сторона здорова
Большая переиндексация потребляет воркерДождаться завершения переиндексации; рассмотреть планирование переиндексаций на непиковое время
Много маленьких пакетов (по 1 документу)Переключиться на documents:batch с 100–1000 на запрос

Матрица решений

ДиагнозИсправление
Валидация 4xx на границеИсправить тело запроса, используя построчные errors[]
Несоответствие схемыОбновить схему индекса, повторно отправить затронутые документы
Задержка очереди < 5 минЖдать
Устойчивая задержка очередиПерейти на более крупные пакеты; обратиться в поддержку, если проблема постоянна
Выполняется переиндексацияДождаться подмены
Задача коннектора упалаПроверить задачу; исправить коннектор или исходные данные

Диагностический пакет

ПолеПримечания
ID организацииобязательно
Slug индексаобязательно
ID задачииз ответа синхронизации или списка sync-jobs
Снимок bufferDepthобязательно
Пример упавшего документаполная нагрузка + error/message из ответа
Когда это началосьUTC метка времени
Тип коннектораесли применимо (PrestaShop, Bitrix и т.д.)

ID документов детерминированы из external_id. Если вы повторно отправляете тот же external_id, он перезаписывается — удалять сначала не нужно.

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

On this page