Hyungi Ahn
|
e91c199537
|
feat(search): Phase 2.3 soft_filter boost (domain/doctype)
## 변경
### fusion_service.py
- SOFT_FILTER_MAX_BOOST = 0.05 (plan 영구 룰, RRF score 왜곡 방지)
- SOFT_FILTER_DOMAIN_BOOST = 0.03, SOFT_FILTER_DOCTYPE_BOOST = 0.02
- apply_soft_filter_boost(results, soft_filters) → int
- ai_domain 부분 문자열 매칭 (path 포함 e.g. "Industrial_Safety/Legislation")
- document_type 토큰 매칭 (ai_domain + match_reason 헤이스택)
- 상한선 0.05 강제
- boost 후 score 기준 재정렬
### api/search.py
- fusion 직후 호출 조건:
- analyzer_cache_hit == True
- analyzer_tier != "ignore" (confidence >= 0.5)
- query_analysis.soft_filters 존재
- notes에 "soft_filter_boost applied=N" 기록
## Phase 2.3 범위
- hard_filter SQL WHERE는 현재 평가셋에 명시 필터 쿼리 없어 효과 측정 불가 → Phase 2.4 v0.2 확장 후
- document_type의 file_format 직접 매칭은 의미론적 mismatch → 제외
- hard_filter는 Phase 2.4 이후 iteration
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-08 15:30:23 +09:00 |
|
Hyungi Ahn
|
a4eb71d368
|
feat(search): Phase 1.1a 모듈 분리 — services/search/ 디렉토리
검색 로직을 services/search/* 모듈로 분리. trigram 도입은 Phase 1.2 인덱스와 함께.
신규:
- services/search/{__init__,retrieval_service,rerank_service,query_analyzer,evidence_service,synthesis_service}.py
- retrieval_service는 search_text/search_vector 이전 (ILIKE 동작 그대로)
- 나머지는 Phase 1.3/2/3 placeholder
이동:
- services/search_fusion.py → services/search/fusion_service.py (R100)
수정:
- api/search.py — thin orchestrator로 축소 (251줄 → 178줄)
동작 변경 없음 — 구조만 분리. 회귀 검증 후 Phase 1.2 진입.
|
2026-04-07 13:46:04 +09:00 |
|