2024-11-14
1. 검색 방식
자연어 & 키워드 검색 지원
- MySQL의 FULLTEXT 검색 기능의 NATURAL LANGUAGE MODE 사용
- 자연어 검색: MySQL이 검색어에서 불용어(은/는/을/를 등)를 자동으로 제거하고 의미있는 단어를 추출하여 검색
- 예시1) 자연어 검색: "청년을 위한 주택 지원 정책"→ MySQL이 자동으로 "청년", "주택", "지원", "정책" 추출하여 검색2) 키워드 검색: "청년주택"→ 입력한 키워드로 바로 검색
2. 검색 범위
검색은 아래 세 개의 필드를 대상으로 수행한다.
- 정책 제목 (title)
- 정책 소개 (introduce)
- 신청 상세내용 (applicationDetails)
3. 검색 결과
- 정렬 방식: 최신순 정렬 (ID 기준 내림차순)
- 페이징 처리: 페이지 단위로 조회
4. API
GET /api/v1/policies/search?keyword={검색어}&page={페이지번호}&size={페이지크기}
5. MySQL Full-Text 검색 동작 원리
REF) https://velog.io/@dl-00-e8/MySQL-Full-text-search-도입
MySQL의 NATURAL LANGUAGE MODE는 AI를 사용하지 않고, 다음과 같은 기본적인 규칙들을 사용한다.
기본 동작 규칙
- 불용어(Stopwords) 제거
- 의미적으로 중요하지 않은 단어들을 자동으로 제거
- 예: '을', '를', '위한', '및', '그리고' 등 (MySQL의 기본 불용어 목록 사용)
- 최소 단어 길이 기준
- 기본적으로 3글자 미만의 단어는 제외
- 설정(ft_min_word_len)을 통해 조정 가능
- 단어 빈도 분석
- 전체 문서의 50% 이상에 등장하는 단어는 덜 중요하게 처리
- 너무 적게 등장하는 단어 역시 중요도가 낮게 계산됨
예시 검색어: "청년을 위한 주택 지원 정책"
- 제거: "을", "위한" → 불용어
- 검색어로 사용: "청년", "주택", "지원", "정책"
장점
- 단순하고 빠른 처리 가능
- 예측 가능한 결과 제공
- DB 수준에서 효율적인 검색 가능
한계
- 문맥 이해 부족
- 동의어/유의어 처리 불가
- 한글 형태소 분석 미지원
보다 고도화된 검색이 필요하다면 Elasticsearch 같은 전문 검색 엔진을 고려할 수 있음
6. 테스트
반응형
'Projects > 청하-청년을 위한 커뮤니티 서비스' 카테고리의 다른 글
[청하] 청년 정책 검색 기능 - (2) 구현 (0) | 2025.04.04 |
---|---|
[청하] Swagger UI 개선 - API 문서 가독성 향상 (0) | 2025.04.03 |
[청하] 정책 필터링 조회 기능 - LazyInitializationException 해결 (feat. 트랜잭션 범위 확장과 프록시 컬렉션 복사) (0) | 2025.02.02 |
[청하] 맞춤 & 핫한 정책 조회 기능 - MySQL의 ONLY_FULL_GROUP_BY 오류 해결 (0) | 2025.01.01 |
[청하] 인덱스 성능 검증 (0) | 2024.12.31 |
댓글