AACsearch
Эксплуатация

Диагностика

Дерево решений по типичным сбоям AACsearch до открытия тикета.

Troubleshooting

Большинство продакшн-проблем укладывается в 7 паттернов. Это дерево: идите сверху, на совпадающий вопрос — лист с фиксом или с пометкой «реально к саппорту с уже собранной диагностикой».

Эскалация после этой страницы — Эскалация саппорту.

Дерево

Неожиданные результаты поиска?               → «Неправильные результаты»
4xx от поиска?                               → «Auth / origin / rate-limit»
5xx от поиска?                               → «Server-side errors»
Ingest не доходит до поиска?                 → «Устаревшие или отсутствующие документы»
Документы приходят, потом исчезают?          → «Документы исчезают»
Реиндекс завис или упал?                     → «Проблемы реиндекса»
Дашборд тормозит/неправильные цифры?         → «Проблемы дашборда»

Неправильные результаты

СимптомСамая вероятная причина
«Искал X — ничего»Typo tolerance выключен или поле не в query_by.
«Не возвращает свежий документ»Документ в буфере, ещё не флашнули. Diagnostics.
«В выдаче удалённый вчера документ»Delete в буфере не флашнут; идёт реиндекс; или delete по одному документу, а приложение ищет в soft-delete-вьюхе.
«Не тот tenant в результатах»filterBy scoped-токена не включает поле tenant или приложение шлёт OR-фильтр, который расширяет. См. Изоляция арендаторов.
«После реиндекса сменилась сортировка»Поменялся default_sorting_field. Diff схемы — в audit log.
«Синонимы не применяются»Набор синонимов не попал в synonymSets реиндекса. Переприменить.

Если документ в дашборде есть, а поиск не возвращает — подозревайте index: true в схеме или отсутствие поля в query_by. Дашборд хранит документ; движок не обязан искать по каждому полю.

Auth / origin / rate-limit

HTTPBodyПричинаФикс
401missing_bearer_tokenНет Authorization.Слать Authorization: Bearer ss_search_….
401invalid_or_revoked_keyОтозван / удалён / битый.API keys → статус. Создать новый.
401invalid_or_expired_scoped_tokenexp в прошлом или HMAC не сходится.Свежий токен. Если сразу после mint — мог ротироваться BETTER_AUTH_SECRET.
403origin_not_allowedOrigin не в allow-list ключа.Добавить. См. Origin allow-list.
403scope_deniedНе та область.Ключ с нужной областью. Search ≠ ingest ≠ admin.
403tenant_mismatchИндекс в другой организации.Ключ из той org, что владеет индексом.
429rate_limitedБакет ключа выбран.Ждать следующую минуту. Лимиты.

Server-side errors

HTTPBodyПричинаФикс
500internal_error + requestIdНеобработанное исключение. Всегда — эскалация с request id.Тикет с request id и таймстампом.
502нет / HTMLEdge proxy не дошёл до upstream.Статус. Зелёный — retry; нет — ждать инцидент.
503degradedUpstream деградирует; рубим часть трафика для восстановления.Backoff. Статус расскажет, почему.
504нетПоиск > 10 секунд. Почти всегда — кривой query.Проверить query. filter_by без подсказки индекса может сканить всё.

Устаревшие или отсутствующие документы

Документ загружен N секунд назад — нет в поиске. Pipeline:

Приложение
     │  POST /api/orpc/searchDocument.bulkUpsert

SearchIngestBuffer (строка PostgreSQL)
     │  Воркер забирает

Typesense bulkUpsert
     │  Документ ищется

Аудит + аналитика

Где может застрять:

  1. Приложение → API — 4xx и не было retry.
  2. API → буфер — строка есть, processedAt null (воркер ещё не дошёл).
  3. Воркер → Typesense — у строки failedAt и сообщение об ошибке.

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

  1. Dashboard → Diagnostics — найти по docId, прочитать таймлайн.
  2. Статус буфераsearchIndex.getIngestStatus.
  3. Retry — retry-воркер до 5 попыток. Если attempts >= 5 и failedAt стоит — сообщение в lastError — ваш фикс.

Если буфер «succeeded», а документа нет — подозревайте memory pressure Typesense или свап, прошедший без подхвата свежих записей. Тикет с document id.

Документы исчезают

Был — нет. По частоте:

  1. Удалили. audit_log.action = bulk_delete_documents или delete_documents_by_filter.
  2. Реиндекс выбросил. Реиндекс тянет из вашего источника. Источник потерял — реиндекс не повезёт.
  3. Удалил коннектор. PrestaShop/Bitrix/Shopify зеркалят CMS. Удалили в CMS — удалится здесь.
  4. Typesense рестартанул из снапшота. Очень редко. Подозреваете — запросите verification report.

Действие: найти строку удаления в audit log. Если нет — это вариант 4, эскалация.

Проблемы реиндекса

СимптомПричина / фикс
Прогресс «застрял» на X %Прогресс обновляется каждые 1 000 документов. На 10 млн «застрял на 50 %» может значить активный push 4 999. Подождите 60 сек.
Реиндекс закончился — новых полей нетsource query их не включал. Проверьте payload источника.
Doc count меньше ожидаемогоsource filter исключает строки, которые вы хотели.
Падение посерединеСм. Реиндекс — когда падает.

Проблемы дашборда

СимптомПричина / фикс
Sign-in зацикливается на странице входаБраузер блокирует third-party cookies для auth-сабдомена. Разрешите cookies для app.aacsearch.com.
404 на проект, который видит коллегаНе та организация. Используйте org-switcher.
Список индексов пустТо же либо не тот проект ключа. Project-switcher.
Аналитика расходится с APIАналитика eventually consistent — до 5 минут.

Когда эскалировать

Если симптома нет в дереве или дошли до листа «реально саппорту» — открывайте тикет по эскалации. Обязательно включите:

  1. Request id (заголовок x-request-id) с упавшего запроса.
  2. Таймстамп UTC.
  3. Org id, project id, index slug.
  4. Что уже проверили из этой страницы.

См. также

On this page