Skip to content

Commit 51aa2a8

Browse files
committed
real last
1 parent f2950f8 commit 51aa2a8

File tree

2 files changed

+29
-25
lines changed

2 files changed

+29
-25
lines changed

back/src/main/java/com/back/domain/search/entity/AgeTheme.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* 이 파일은 연령대+카테고리 테마 사전 엔티티를 정의한다.
3-
* 흐름: 테마 문자열 + 임베딩 보관, min_age~max_age 및 category로 필터링
3+
* 흐름: 테마 문자열/임베딩 보관 min_age~max_age 및 category로 필터링
44
*/
55
package com.back.domain.search.entity;
66

@@ -17,21 +17,26 @@
1717
@NoArgsConstructor @AllArgsConstructor @Builder
1818
public class AgeTheme {
1919

20-
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
20+
@Id
21+
@GeneratedValue(strategy = GenerationType.IDENTITY)
22+
@Column(name = "id")
2123
private Long id;
2224

23-
@Column(nullable = false) private int minAge;
24-
@Column(nullable = false) private int maxAge;
25+
@Column(name = "min_age", nullable = false)
26+
private int minAge;
27+
28+
@Column(name = "max_age", nullable = false)
29+
private int maxAge;
2530

2631
@Enumerated(EnumType.STRING)
27-
@Column(nullable = false, length = 32)
32+
@Column(name = "category", nullable = false, length = 32)
2833
private NodeCategory category;
2934

30-
@Column(nullable = false, columnDefinition = "text")
35+
@Column(name = "theme", nullable = false, columnDefinition = "text")
3136
private String theme;
3237

3338
@JdbcTypeCode(SqlTypes.OTHER)
3439
@Convert(converter = PgVectorConverter.class)
35-
@Column(nullable = false, columnDefinition = "vector(768)")
40+
@Column(name = "embedding", nullable = false, columnDefinition = "vector(768)")
3641
private float[] embedding;
3742
}

back/src/main/resources/db/migration/V9__add_ageTheme_and_vocabTerm.sql

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,50 +3,49 @@
33
* 흐름: 확장 활성화 → age_theme(제약/인덱스) → vocab_term(제약/인덱스) → ANALYZE
44
*/
55

6-
-- 확장 활성화
6+
-- next 확장 활성화
77
CREATE EXTENSION IF NOT EXISTS vector;
88

9-
-- age_theme 테이블 생성
9+
-- next age_theme 테이블 생성
1010
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
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
1515
CHECK (category IN ('EDUCATION','CAREER','RELATIONSHIP','FINANCE','HEALTH','LOCATION','ETC')),
16-
theme TEXT NOT NULL,
17-
embedding VECTOR(768) NOT NULL,
16+
theme TEXT NOT NULL,
17+
embedding VECTOR(768) NOT NULL,
1818
-- 무결성 검증
1919
CHECK (min_age >= 0 AND max_age >= min_age)
2020
);
2121

22-
-- 범주/연령대 필터 인덱스
22+
-- next 범주/연령대 필터 인덱스
2323
CREATE INDEX IF NOT EXISTS idx_age_theme_cat_age
2424
ON age_theme(category, min_age, max_age);
2525

26-
-- 코사인 KNN 인덱스(운영 저사양 고려 ivfflat 사용)
26+
-- next 코사인 KNN 인덱스(저사양 고려 ivfflat)
2727
CREATE INDEX IF NOT EXISTS idx_age_theme_embedding_ivfflat
2828
ON age_theme USING ivfflat (embedding vector_cosine_ops)
2929
WITH (lists = 50);
3030

31-
-- vocab_term 테이블 생성(용어 유니크)
31+
-- next vocab_term 테이블 생성 (term 유니크)
3232
CREATE TABLE IF NOT EXISTS vocab_term (
33-
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
34-
term VARCHAR(128) NOT NULL UNIQUE,
35-
embedding VECTOR(768) NOT NULL
33+
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
34+
term VARCHAR(128) NOT NULL UNIQUE,
35+
embedding VECTOR(768) NOT NULL
3636
);
3737

38-
-- 코사인 KNN 인덱스
38+
-- next 코사인 KNN 인덱스
3939
CREATE INDEX IF NOT EXISTS idx_vocab_term_embedding_ivfflat
4040
ON vocab_term USING ivfflat (embedding vector_cosine_ops)
4141
WITH (lists = 50);
4242

43-
-- 통계 수집(IVFFLAT 생성 후 권장)
43+
-- next 통계 수집(IVFFLAT 생성 후 권장)
4444
ANALYZE age_theme;
4545
ANALYZE vocab_term;
4646

4747
/*
48-
-- 무결성 검증
49-
-- HNSW를 쓰고 싶다면 아래로 교체(메모리 여유 필요, PG ≥ 16 권장)
48+
-- 옵션: 메모리 여유 & PG ≥ 16이면 HNSW 사용
5049
-- CREATE INDEX IF NOT EXISTS idx_age_theme_embedding_hnsw
5150
-- ON age_theme USING hnsw (embedding vector_cosine_ops);
5251
-- CREATE INDEX IF NOT EXISTS idx_vocab_term_embedding_hnsw

0 commit comments

Comments
 (0)