fix(search): trigram threshold 0.3 → 0.15 (set_limit)
Phase 1.2-B 평가셋 결과 recall 0.788 → 0.750 회귀. 원인: trigram default threshold 0.3이 multi-token 쿼리에서 너무 엄격. 예: '이란 미국 전쟁 글로벌 반응' 같은 5단어 한국어 뉴스 쿼리는 title/ai_summary trigram 매칭이 거의 안 됨. 해결: search_text 시작 시 set_limit(0.15) 호출. - trigram 매칭 더 관대 (recall ↑) - precision은 ORDER BY similarity 가중 합산이 보정 - p95 latency 169ms 여유 충분 (목표 500ms)
This commit is contained in:
@@ -40,9 +40,19 @@ async def search_text(
|
||||
JOIN documents d ON d.id = c.id
|
||||
ORDER BY 5컬럼 similarity 가중 합산 + ts_rank * 2.0
|
||||
가중치: title 3.0 / ai_tags 2.5 / user_note 2.0 / ai_summary 1.5 / extracted_text 1.0
|
||||
|
||||
threshold:
|
||||
pg_trgm.similarity_threshold default = 0.3
|
||||
→ multi-token 한국어 뉴스 쿼리(예: "이란 미국 전쟁 글로벌 반응")에서
|
||||
candidates를 못 모음 → recall 감소 (0.788 → 0.750)
|
||||
→ set_limit(0.15)으로 낮춰 recall 회복. precision은 ORDER BY similarity 합산이 보정.
|
||||
"""
|
||||
from api.search import SearchResult # 순환 import 회피
|
||||
|
||||
# trigram threshold를 0.15로 낮춰 multi-token query recall 회복
|
||||
# SQLAlchemy async session 내 두 execute는 같은 connection 사용
|
||||
await session.execute(text("SELECT set_limit(0.15)"))
|
||||
|
||||
result = await session.execute(
|
||||
text("""
|
||||
WITH candidates AS (
|
||||
|
||||
Reference in New Issue
Block a user