diff --git a/journey/research/rag/260323_PostgreSQL_simple_FTS_한국어_키워드검색_한계_및_대안_요약.md b/journey/research/rag/260323_PostgreSQL_simple_FTS_한국어_키워드검색_한계_및_대안_요약.md new file mode 100644 index 0000000..5c8117d --- /dev/null +++ b/journey/research/rag/260323_PostgreSQL_simple_FTS_한국어_키워드검색_한계_및_대안_요약.md @@ -0,0 +1,49 @@ +--- +type: research +tags: [research, rag, postgresql, fts, korean, pg_trgm, hybrid-search, skill-rag-file] +status: open +research_target: PostgreSQL simple + prefix(:*) 한국어 키워드 검색 한계, 공식 문서 근거, pg_trgm·형태소·하이브리드·쿼리/스코어 보완안 정리 (Gemini 대화 + 운영 관찰 반영) +--- + +# PostgreSQL simple FTS·한국어 키워드 검색 한계 및 대안 요약 + +**작성일**: 2026-03-23 +**성격**: 외부 LLM(Gemini) 논의·사용자 확인·공식 문서 링크를 한 장으로 압축한 리서치 메모. 구현 확정이 아님. + +## 1. 현상 (운영에서 관찰) + +- `search_mode: keyword` 단독 경로에서 **0건**이 나오는 경우가 있음. +- P0에서 `prefix(:*)` + 낮은 threshold로 **특정 고유명사** 쿼리에서는 건수가 나왔으나, **다른 질의에서는 0건** → prefix만으로 전 질의를 커버하지 못함. +- **데이터 부재가 아님**: 원본·`tsvector`는 DB에 있으나, **키워드 단독 검색 경로의 쿼리/점수/threshold·로직** 때문에 결과가 살아나지 않는 케이스에 가깝다는 정리가 있음 (추출 실패 주장보다 검색 경로 실패). + +## 2. PostgreSQL 공식 관점 (확인된 해석) + +- **Prefix `:*`**: `tsvector` 안의 **lexeme 접두**만 맞춘다. 형태소 분석을 새로 해 주지 않는다. + - 참고: [Text Search Controls](https://www.postgresql.org/docs/current/textsearch-controls.html), [Text Search Functions](https://www.postgresql.org/docs/current/functions-textsearch.html) +- **simple + 한국어**: 공백 중심 토큰화로 **조사 결합·복합명사·공백 없는 붙임** 등에서 lexeme이 기대와 다르게 쌓이면, `@@` / rank가 기대와 어긋날 수 있음. +- **pg_trgm**: FTS가 직접 못 맞추는 패턴 보완에 유용하다는 설명이 문서에 있음 (버전별 문서; 예: [pg_trgm](https://www.postgresql.org/docs/current/pgtrgm.html)). + +→ 리서치에서 쓴 **「90%는 상한이지 보장값이 아님」**류의 판단과 방향이 공식 설명과 충돌하지 않음. + +## 3. 대안 축 (우선순위는 인프라·팀 합의 후) + +| 축 | 요지 | 장점 | 부담 | +|----|------|------|------| +| **pg_trgm** | 3-gram + `similarity` / `ILIKE` 인덱싱 | 사전 없이 부분 일치·복합어 틈 보완 | 인덱스 크기·노이즈 후보 | +| **한국어 형태소 (예: MeCab 계열)** | 조사 분리·표제어 중심 인덱싱 | 검색 품질 상한 높음 | OS/확장 설치·운영 | +| **하이브리드** | FTS 랭크 + trgm 유사도 등 가중 결합 | 0건 구간 완화·재현율 보완 | 스코어 설계·튜닝 | +| **쿼리/스코어 로직** | AND만 고집하지 않기, OR·완화 단계, **raw score 로깅** 후 threshold 적응 | 앱 레벨에서 빠른 실험 | 과매칭·튜닝 부채 | + +## 4. 검색 경로 쪽에서의 즉시 점검 아이디어 (코드/운영) + +- `plainto_tsquery` / `to_tsquery` / `websearch_to_tsquery` 중 **무엇을 쓰는지** 확인. +- 0건일 때 **필터 전 raw score** 로그로 “진짜 0 매칭인지 vs 임계값 컷인지” 분리. +- 필요 시 **완화 단계**: 엄격 검색 → threshold 완화 → OR/ prefix 혼합 → trgm 폴백 등. + +## 5. 관련 내부 문서 (있으면 링크) + +- 하이브리드/키워드 리콜 이슈: `journey/research/rag/260321_하이브리드검색_keyword_recall0_및_grounding_실패_원인확정_리서치.md` 등 (프론트메타 `status`는 해당 파일 기준). + +## 6. 한계 + +- 본 문서는 **대화·문헌 요약**이며, 23서버 실제 `EXPLAIN`·스코어 분포·로빙 코드 라인에 대한 **검증 결과는 포함하지 않음**. 다음 작업에서 Truth First로 보강할 것.