-- Phase 0.3: 검색 실패 자동 로깅 -- -- 목적: gold dataset 시드 수집. 평가셋(tests/search_eval/queries.yaml) 확장 재료. -- 자동 수집 트리거: -- 1) result_count = 0 → failure_reason = 'no_result' -- 2) confidence < 0.5 → failure_reason = 'low_confidence' -- 3) 같은 사용자 60초 내 재쿼리 → failure_reason = 'user_reformulated' (이전 쿼리 기록) -- -- confidence는 Phase 0.3 시점엔 휴리스틱(top score 기반). -- Phase 2 QueryAnalyzer 도입 후 LLM 기반 confidence로 교체될 예정. CREATE TABLE IF NOT EXISTS search_failure_logs ( id BIGSERIAL PRIMARY KEY, query TEXT NOT NULL, user_id BIGINT REFERENCES users(id) ON DELETE SET NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), result_count INTEGER NOT NULL, confidence DOUBLE PRECISION, -- 0..1, NULL이면 미산정 failure_reason VARCHAR(30) NOT NULL, -- no_result | low_confidence | user_reformulated context JSONB, -- top_score, mode, returned_ids[], reformulated_to 등 reviewed BOOLEAN NOT NULL DEFAULT FALSE -- 평가셋에 흡수되었는지 표시 ); -- 사용자별 시간순 조회 (recent failures, 동일 사용자 패턴 분석) CREATE INDEX IF NOT EXISTS idx_search_failure_user_time ON search_failure_logs (user_id, created_at DESC); -- failure_reason별 집계 (대시보드/리포트) CREATE INDEX IF NOT EXISTS idx_search_failure_reason ON search_failure_logs (failure_reason, created_at DESC); -- 미리뷰 항목 우선 노출 (gold dataset 큐레이션 작업 큐) CREATE INDEX IF NOT EXISTS idx_search_failure_unreviewed ON search_failure_logs (created_at DESC) WHERE reviewed = FALSE;