File tree Expand file tree Collapse file tree 1 file changed +44
-0
lines changed
back/src/main/resources/db/migration Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Original file line number Diff line number Diff line change 1+ /*
2+ * 이 파일은 pgvector 기반 검색 테이블을 한 번에 생성한다.
3+ * 흐름: 확장 활성화 → age_theme 생성/인덱스 → vocab_term 생성/인덱스 → ANALYZE
4+ */
5+
6+ -- 확장 활성화
7+ CREATE EXTENSION IF NOT EXISTS vector;
8+
9+ -- age_theme 테이블 생성
10+ CREATE TABLE IF NOT EXISTS age_theme (
11+ id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY ,
12+ min_age INT NOT NULL ,
13+ max_age INT NOT NULL ,
14+ category VARCHAR (32 ) NOT NULL ,
15+ theme TEXT NOT NULL ,
16+ embedding VECTOR(768 ) NOT NULL ,
17+ -- 무결성 검증
18+ CONSTRAINT ck_age_theme_age_range CHECK (min_age >= 0 AND max_age >= min_age)
19+ );
20+
21+ -- 범주/연령대 필터 인덱스
22+ CREATE INDEX IF NOT EXISTS idx_age_theme_cat_age
23+ ON age_theme(category, min_age, max_age);
24+
25+ -- 코사인 KNN 인덱스(저사양 환경 고려 ivfflat)
26+ CREATE INDEX IF NOT EXISTS idx_age_theme_embedding_ivfflat
27+ ON age_theme USING ivfflat (embedding vector_cosine_ops)
28+ WITH (lists = 50 );
29+
30+ -- vocab_term 테이블 생성
31+ CREATE TABLE IF NOT EXISTS vocab_term (
32+ id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY ,
33+ term VARCHAR (128 ) NOT NULL UNIQUE,
34+ embedding VECTOR(768 ) NOT NULL
35+ );
36+
37+ -- 코사인 KNN 인덱스
38+ CREATE INDEX IF NOT EXISTS idx_vocab_term_embedding_ivfflat
39+ ON vocab_term USING ivfflat (embedding vector_cosine_ops)
40+ WITH (lists = 50 );
41+
42+ -- 통계 수집
43+ ANALYZE age_theme;
44+ ANALYZE vocab_term;
You can’t perform that action at this time.
0 commit comments