
가. 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 |
| 📝 JPA | Hibernate |
| 🙈 외부 라이브러리 | lombok, thymeleaf, AJAX |
| 📏 디자인 패턴 | MVC |