AACsearch
Аналитика

Обзор аналитики

Поисковая аналитика в AACSearch — что меряется, где живут данные и как использовать их для улучшения relevance, контента и конверсии.

AACSearch пишет каждый поиск, каждый клик, каждую конверсию и каждое операционное событие, касающееся ваших индексов. Данные доступны в трёх местах — страница Analytics в дашборде, oRPC-процедуры аналитики и CSV / JSON export — чтобы вы могли и диагностировать конкретные запросы, и закрывать петлю, возвращая инсайты в relevance, наполнение контента и анализ выручки.

Эта секция — клиент-facing справочник по этим данным. Страница дашборда покрывает UI; эта секция — концепции, схемы и воркфлоу, превращающие телеметрию в улучшения.

Что меряется

ПоверхностьЧто пишетсяКуда падает
SearchКаждый вызов /api/search и /api/search/multi — запрос, фильтры, кол-во результатов, латентность.SearchUsageEvent
ClickКаждый клик по результату с position, productId, queryId.SearchUsageEvent
No-resultПоиски с 0 хитов (выделены отдельной панелью).SearchUsageEvent + Zero Queries
Filter / sortСобытия filter_used с filter-выражением.SearchUsageEvent
Widget openПервый показ виджета.SearchUsageEvent
ConversionПокупка / signup / кастомное событие, привязанное к поиску.SearchUsageEvent (type=conversion)
AI answerКаждый /api/search/ai/answer с searchTimeMs и totalTimeMs.SearchUsageEvent (type=ai_answer)
Knowledge askКаждый knowledge.ask / askStream с расходом токенов.SearchUsageEvent (type=knowledge_ask)
Admin activityСоздание индекса, ротация ключа, reindex started/finished, sync job completed, quota warning.SearchActivityEvent
Rate limit429-ответы (debug only).SearchRateLimitBucket

Tenant scope: у каждой строки есть organizationId. Cross-org чтений нет (Инвариант 5).

Схема событий (клиентская)

Публичный сбор событий — POST /events/track (см. packages/api/modules/search/events-public.ts). Принимаемая форма намеренно узкая — без email, без полного IP, UA в 256 символов — её безопасно ставить на любой storefront:

{
  type: "search_query" | "zero_results" | "result_click" | "widget_open"
      | "filter_used" | "conversion" | "visit" | "click";
  sessionId?: string;
  anonymousUserId?: string;
  query?: string;
  productId?: string;
  position?: number;
  filters?: Record<string, unknown>;
  sort?: string;
  locale?: string;
  referrer?: string;
  queryId?: string;             // связывает клики с поиском, который их породил
  conversionType?: string;      // "purchase", "signup", "add_to_cart", …
  metadata?: Record<string, unknown>;
}

Можно слать пачкой до 50 событий ({ events: [...] }) и использовать sendBeacon на unload — оба пути first-class в виджете.

Точные имена (search_query, result_click, …) совпадают с тем, что появляется в таблицах аналитики и тем, что эмиттит SDK / виджет. Держите согласованными; не выдумывайте свои типы на клиенте.

Откуда читать

Дашборд

Analytics дашборд — KPI-плитки, временные ряды, Top Queries, Failed Queries, Activity. UI для всех; селектор периода управляет всеми табами. Ретеншн зависит от плана (24 ч на всех; 30 дней на платных).

oRPC-процедуры

Для программного доступа — protected-процедуры в packages/api/modules/search/router.ts:

ПроцедураЧто возвращает
search.usageSummaryИтоги по периоду: searches, clicks, CTR, p50/p95 латентность.
search.topQueriesТоп запросов с searches, clicks, CTR, флагом zero-results.
search.analyticsВременные ряды и агрегаты по типу события.
search.recentActivityФид активности из SearchActivityEvent.
search.ctrAnalyticsДневной тренд CTR.
search.analyticsEventsСырые события (paginated, filtered).
knowledge.usageMetricsРасход токенов и количество запросов модуля Knowledge.

Каждая принимает organizationId + period (24h, 7d, 30d) и возвращает Prisma-строки для любого UI.

Export

CSV и JSON — Export.

Замкнутая петля

Аналитика сама по себе — просто дашборд. Смысл — превратить каждую метрику в действие:

Что вы видитеКуда вести
Запросы с большим объёмом и низким CTRRelevance tuning — синонимы, веса queryBy, curations.
Запросы с нулевыми результатамиNo-results loop — gap контента или synonym/curation.
Запросы с объёмом и без конверсийConversions — funnel; возможно, AI answer или merchandising.
Скачок failed queries (4xx / 5xx)Operations / errors — rate limit, scoped-token проблема.
Рост no-result rateКаденс re-ingest — Ingest и reindex.
Падение CTR при стабильном объёмеCuration drift или шум синонимов — аудит Relevance панели.
Widget-open без последующего поискаUX виджета — Widget overview.

E-commerce-петля типична: zero-results → видим missing brand → синоним → меряем восстановление в CTR того же запроса в следующем периоде. SaaS / knowledge-base: низкий-CTR-запрос → переписать title статьи → re-ingest → меряем рост CTR.

Ретеншн и privacy

  • Ретеншн. Все строки событий хранятся в окне плана — обычно 90 дней. Агрегаты в SearchActivityEvent хранятся дольше.
  • PII. Публичный events-эндпоинт сознательно не принимает полный IP / email. UA обрезается. metadata — opaque, но не больше 4 КБ JSON.
  • GDPR / DPA. Scope персональных данных AACSearch — Security & Compliance. Путь аналитики виджета — в стандартном DPA.
  • Right-to-be-forgotten. Удаление по anonymousUserId — см. Data privacy по процедуре редактирования.

Примеры

E-commerce

Смотрим: top queries, conversion rate per query, no-result rate, использование фасета brand.

Что читать вместе:

  • topQueries за неделю + ctrAnalytics дневной тренд.
  • analyticsEvents с фильтром type=conversion для атрибуции выручки.
  • noResults панель + brand-additions от контент-команды.

SaaS / knowledge-base

Смотрим: zero-result rate, click-to-article rate, refusal rate у AI ответа.

Что читать вместе:

  • Топ zero-result-запросов → gap-ы в help-center.
  • knowledge.usageMetrics расход токенов + всплески refusal-rate → регрессии качества после обновления документов.

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

On this page