본문 바로가기
Projects/청하-청년을 위한 커뮤니티 서비스

[청하] 청년 정책 검색 기능 - (1) 설계

by Lpromotion 2025. 2. 4.

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를 사용하지 않고, 다음과 같은 기본적인 규칙들을 사용한다.

 

기본 동작 규칙

  1. 불용어(Stopwords) 제거
    • 의미적으로 중요하지 않은 단어들을 자동으로 제거
    • 예: '을', '를', '위한', '및', '그리고' 등 (MySQL의 기본 불용어 목록 사용)
  2. 최소 단어 길이 기준
    • 기본적으로 3글자 미만의 단어는 제외
    • 설정(ft_min_word_len)을 통해 조정 가능
  3. 단어 빈도 분석
    • 전체 문서의 50% 이상에 등장하는 단어는 덜 중요하게 처리
    • 너무 적게 등장하는 단어 역시 중요도가 낮게 계산됨

 

예시 검색어: "청년을 위한 주택 지원 정책"

  • 제거: "을", "위한" → 불용어
  • 검색어로 사용: "청년", "주택", "지원", "정책"

 

장점

  • 단순하고 빠른 처리 가능
  • 예측 가능한 결과 제공
  • DB 수준에서 효율적인 검색 가능

한계

  • 문맥 이해 부족
  • 동의어/유의어 처리 불가
  • 한글 형태소 분석 미지원
보다 고도화된 검색이 필요하다면 Elasticsearch 같은 전문 검색 엔진을 고려할 수 있음

 

6. 테스트

반응형

댓글