mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 11:26:25 +00:00
78 lines
2.9 KiB
SQL
78 lines
2.9 KiB
SQL
-- RAG 회의록 테이블 생성
|
|
-- 회의록 정보를 embedding과 함께 저장하여 유사 회의록 검색에 사용
|
|
|
|
-- pgvector 확장이 이미 설치되어 있는지 확인 (terms 테이블용으로 설치되어 있음)
|
|
CREATE EXTENSION IF NOT EXISTS vector;
|
|
|
|
-- rag_minutes 테이블 생성
|
|
CREATE TABLE IF NOT EXISTS rag_minutes (
|
|
-- Meeting 정보
|
|
meeting_id VARCHAR(50) NOT NULL,
|
|
title VARCHAR(200) NOT NULL,
|
|
purpose VARCHAR(500),
|
|
description TEXT,
|
|
scheduled_at TIMESTAMP,
|
|
location VARCHAR(200),
|
|
organizer_id VARCHAR(50) NOT NULL,
|
|
|
|
-- Minutes 정보
|
|
minutes_id VARCHAR(50) PRIMARY KEY,
|
|
minutes_status VARCHAR(20) NOT NULL DEFAULT 'FINALIZED',
|
|
minutes_version INTEGER NOT NULL DEFAULT 1,
|
|
created_by VARCHAR(50) NOT NULL,
|
|
finalized_by VARCHAR(50),
|
|
finalized_at TIMESTAMP,
|
|
|
|
-- 회의록 섹션 (JSON 형태로 저장)
|
|
sections JSONB,
|
|
|
|
-- 전체 회의록 내용 (검색용 텍스트)
|
|
full_content TEXT NOT NULL,
|
|
|
|
-- Embedding 벡터 (1536 차원)
|
|
embedding vector(1536),
|
|
|
|
-- 메타데이터
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- 인덱스 생성
|
|
-- Meeting ID로 검색
|
|
CREATE INDEX IF NOT EXISTS idx_rag_minutes_meeting_id
|
|
ON rag_minutes(meeting_id);
|
|
|
|
-- 제목으로 검색 (Full-text search)
|
|
CREATE INDEX IF NOT EXISTS idx_rag_minutes_title
|
|
ON rag_minutes(title);
|
|
|
|
-- 확정 일시로 정렬
|
|
CREATE INDEX IF NOT EXISTS idx_rag_minutes_finalized_at
|
|
ON rag_minutes(finalized_at DESC);
|
|
|
|
-- 작성자로 검색
|
|
CREATE INDEX IF NOT EXISTS idx_rag_minutes_created_by
|
|
ON rag_minutes(created_by);
|
|
|
|
-- 벡터 유사도 검색용 인덱스 (IVFFlat)
|
|
-- lists 파라미터는 데이터 크기에 따라 조정 (작은 데이터셋의 경우 100 정도가 적당)
|
|
CREATE INDEX IF NOT EXISTS idx_rag_minutes_embedding
|
|
ON rag_minutes USING ivfflat (embedding vector_cosine_ops)
|
|
WITH (lists = 100);
|
|
|
|
-- Full-text search를 위한 GIN 인덱스
|
|
CREATE INDEX IF NOT EXISTS idx_rag_minutes_full_content_gin
|
|
ON rag_minutes USING gin(to_tsvector('simple', full_content));
|
|
|
|
-- 코멘트 추가
|
|
COMMENT ON TABLE rag_minutes IS '회의록 RAG 저장소 - Embedding 벡터와 함께 저장된 회의록 정보';
|
|
COMMENT ON COLUMN rag_minutes.meeting_id IS '회의 ID';
|
|
COMMENT ON COLUMN rag_minutes.title IS '회의 제목';
|
|
COMMENT ON COLUMN rag_minutes.purpose IS '회의 목적';
|
|
COMMENT ON COLUMN rag_minutes.minutes_id IS '회의록 ID (Primary Key)';
|
|
COMMENT ON COLUMN rag_minutes.sections IS '회의록 섹션 목록 (JSON 배열)';
|
|
COMMENT ON COLUMN rag_minutes.full_content IS '전체 회의록 내용 (검색용 텍스트)';
|
|
COMMENT ON COLUMN rag_minutes.embedding IS 'OpenAI text-embedding-ada-002 벡터 (1536차원)';
|
|
COMMENT ON COLUMN rag_minutes.created_at IS '레코드 생성 일시';
|
|
COMMENT ON COLUMN rag_minutes.updated_at IS '레코드 수정 일시';
|