Blog

[Spring][258] keyword 검색 시 keyword를 포함한 일부 데이터가 검색되지 않는 문제

Category
Author
Tags
PinOnMain
1 more property
문제 상황 및 원인
구분자 기법의 FULLTEXT indexing은 keyword를 자동으로 규칙에 맞춰 분류해 준다. 그러나 검색 시에는 생성된 keyword가 정확히 일치한 데이터만 출력해 준다. 그렇기에 like 구문을 사용한 데이터와 구분자 기법의 FULLTEXT index를 활용한 데이터는 서로 다른 결과값을 출력한다.
해결 방법
MySQL FULLTEXT indexing 기법에는 N-gram 기법이 있다. 구분자 기법과는 다르게 모든 데이터를 N글자씩 분리하여 keyword로 생성하는 방법이다.
분리되는 글자 수는 ngram_token_size 변수명으로 관리되고 있고 변경하려면 my.ini에 동일하게 값을 넣어 수정할 수 있으나 기본값이 2이기에 따로 수정하지 않았다.
ALTER TABLE book ADD FULLTEXT(book_name) WITH PARSER ngram;
SQL
복사
기존 명령어 뒤에 ngram parser를 활용하도록 코드를 작성하는 것으로 생성할 수 있다.
그러나 ngram 기법도 완전한 해결책은 될 수 없다. 3글자 이상의 키워드를 검색하게 될 경우, 키워드의 일부분이 포함된 모든 결과가 도출된다. 예를 들어 스프링 을 검색하게 된다면 스프 가 들어간 데이터들과 프링이 들어간 데이터들이 모두 출력되어 스프링이 검색은 되는데 정확도가 떨어진다.