docs(research/rag): PostgreSQL 한국어 FTS·키워드 검색 한계 요약
Made-with: Cursor
This commit is contained in:
parent
4a356a9542
commit
74503ab24b
@ -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로 보강할 것.
|
||||||
Loading…
x
Reference in New Issue
Block a user