Full Text Index를 활용하여 유사한 단어 검색하기

Halo·2025년 6월 19일
0

JAVA/Spring

목록 보기
14/15
post-thumbnail

👀 의미

가. Index란?
마치 책의 목차처럼 특정범위를 나누어 바로 접근하는 자료구조이다.

나. Full Text Index란

띄어쓰기한 단어 기준으로 index를 생성하는 것이다.
하지만 한국어 중국어 일본어는 띄어쓰기가 없기때문에 full text Index를 사용하면 문제 생기는데 이러한 문제를 해결하기 위해 n-gram-parser을 사용한다.

n-gram-parser와 함께 Full Text Index 사용법

CREATE FULLTEXT INDEX 원하는_인덱스_이름
ON 테이블(컬럼명) With parser ngram

즉, 가나다를 검색하고 싶을 때, 가나를 검색해서 가나다를 찾는 방법이다.


다. JPA에서 SQL 문법 실행하여 구현할 수 있다.

@Query(value="select * from item where id = ?1 ?2", nativeQuery = true)
Item func(Long id1, Long id2);

바꾸고 싶은 부분 ?로 하면 파라미터 처리가 된다.

만약 Full Text index 쓰고 싶다면?

@Query(value="select * from item where match(title) against(?1)", nativeQuery = true)
List<Item>  findAllItemByTitle(String searchText);
  • match(title) against(?1) : 해당 SQL문이 Full Text Index를 실행시켜준다.

💁🏻 사용하는 이유

가. 굉장히 편리하다
검색시 원하는 문자의 빈도수와 순서를 알아서 판단해서 서버에게 제공해준다. 따라서 높은 빈도수 높은 정확도를 가진 검색 결과를 클라이언트에게 개발자가 따로 로직을 구현하지 않아도 제공할 수 있다.


😏 기타

가. 특정 컬럼에서 특정 문자열 포함하는 행 찾는 JPA 함수

repo.findAllyBy컬럼명Contains

❗️ 트러블 슈팅

가. 검색어가 너무 짧아서 검색이 안되는 상황 발생

my sql 설정파일에서 3글자 이상만 검색되게 설정됨.

[mysqld]
ft_min_word_len=1

으로 변경 필요


📝 느낀점

이제 검색 결과를 보여주기만 하면된다.


🛠️ 환경

항목Env Info
🖥️ 서버Tomcat
🍭 프레임워크Spring Boot
📀 데이터베이스MySQL with Azure
📝 JPAHibernate
🙈 외부 라이브러리lombok, thymeleaf, AJAX
📏 디자인 패턴MVC
profile
새끼 고양이 키우고 싶다

0개의 댓글