# 260320 다형식문서 RAG 2차 PGVector·JSONB 적재 계획

## 목적

- 1차에서 생성한 MD와 메타를 PostgreSQL 중심 저장 구조로 적재한다.
- 2차 범위는 `document_files`, `document_chunks` 중심으로 문서와 청크를 저장하고, PGVector 검색을 붙이는 것이다.

## 참조 문서

- [PGVector·JSONB RAG 스키마 설계 리서치](../research/rag/260320_PGVector_JSONB_RAG_스키마_설계_리서치.md)
- [Front Matter 메타데이터 설계 리서치](../research/rag/260320_FrontMatter_메타데이터_설계_리서치.md)

## 범위

- MD 파생본 읽기
- front matter -> JSONB 적재
- 본문 청크 분리
- 청크별 임베딩 생성
- PGVector 인덱스 구성
- 키워드 검색용 TSVECTOR 구성

## 실제 구현 현황 (코드 기준)

### 이미 존재하는 테이블 (신규 생성 불필요)
- `team_document`: 문서 단위 관리 (id, team_id, filename, file_hash, storage_path, text_content, chunk_count, processing_status, metadata JSONB)
- `team_document_chunk`: 청크 단위 관리 (id, team_id, document_id, chunk_text, embedding vector(768), metadata JSONB)
- 인덱스: HNSW cosine(embedding), GIN(metadata), compound(team_id+document_id)

### 구현 완료
- 문서/청크 테이블 분리 ✅
- JSONB 메타데이터 ✅
- PGVector 768차원 + HNSW cosine 인덱스 ✅
- 벡터 유사도 검색 (`PostgresDocumentVectorStore.search()`) ✅
- 하이브리드 인덱싱 (PDF 바이너리 직접 + 텍스트 fallback) ✅
- file_hash 기반 중복 방지 ✅
- 200개 파일 인덱싱 스크립트 (`reindex_companyx_latest_200.py`) ✅

### 미구현
- `team_document_chunk`에 tsvector 컬럼 없음 → **키워드 검색(TSVECTOR + GIN) 추가 필요**
- 하이브리드 검색(벡터+키워드 RRF 합산) 없음
- 리랭킹 없음

### 핵심 코드 경로
- 인덱싱: `skill-rag-file/app/services/indexing_pipeline.py` → `embedding.py` → `postgres_vector_store.py`
- 검색: `skill-rag-file/app/api/search.py` → `postgres_vector_store.search()`
- 그라운딩: `rb8001/app/services/companyx_grounding_service.py`

## 산출물

- ~~PostgreSQL 스키마~~ → 이미 존재 (`team_document`, `team_document_chunk`)
- ~~적재 배치 스크립트~~ → 이미 존재 (`reindex_companyx_latest_200.py`)
- tsvector 컬럼 + GIN 인덱스 추가 마이그레이션
- 하이브리드 검색 구현

## 완료 조건

- 벡터 검색 + 키워드 검색이 모두 동작한다.
- source_path/file_hash 기준 중복 적재 방지가 된다.
- 재적재 시 변경 문서만 갱신할 수 있다.

## 현재 상태 (260320)

- `team_document`: Company X 1,121건 completed, 51건 processing
- `team_document_chunk`: 3,095건 (768차원 임베딩, HNSW cosine 인덱스)
- 인덱싱 스크립트: `skill-rag-file/scripts/reindex_companyx_latest_200.py`
- 200개 대상 파일 리스트: `/tmp/latest_200_companyx.txt`
- 텍스트 추출 + 청크 + Gemini Embedding 2 적재 완료
- **미구현**: `team_document_chunk`에 tsvector 컬럼 없음 → 키워드 검색(TSVECTOR + GIN) 추가 필요

## 보류

- OCR 보강
- 관계 그래프 확장
- 로빙 런타임 직접 연결
