Daylogs/DB
MySQL: FULLTEXT 인덱스 쿼리에서 2글자 검색하기
ohgyun
2016. 12. 8. 10:53
발생일: 2016.12.07
키워드: mysql, fulltext, boolean mode, innodb_ft_min_token_size, aws
문제:
MySQL에서 BOOLEAN MODE 로 FULLTEXT 쿼리를 하려고 하는데, 검색어가 2글자인 경우 검색이 되지 않는다.
해결책:
FULLTEXT 인덱스를 생성하는 기준에 캐릭터 개수에 대한 최소값이 있었기 때문이었다.
innoDB인 경우 기본적으로 3글자, MyISAM DB인 경우 4글자가 기본값이다.
최소값 기준은 MySQL의 innodb_ft_min_token_size 설정하면 변경할 수 있다.
인스턴스의 기본 설정값이기 때문에, 값을 변경한 후엔 디비 인스턴스를 리스타트해야 하고, 인덱스도 새로 만들어야 한다고 한다.
우린 innoDB를 사용하고 있고 2글자로 변경하고 싶었기 때문에,
innodb_ft_min_token_size 값을 2로 변경해 리스타트하고 인덱스를 다시 만드는 방법으로 해결했다.
논의:
우린 AWS RDS를 사용하고 있다.
AWS에서는 AWS > RDB Dashboard > Parameter Groups 메뉴에서 사용하는 파라미터 그룹을 찾아 변경하면 된다.
난 innodb_ft_min_token_size 옵션을 검색해 2로 변경했다.
AWS에서 parameter 변경했더니 pending-reboot으로 나와서, 자동으로 리스타트되나 했는데 '설정이 다르다'는 걸 의미하는 상태라고 한다.
고정 파라미터를 변경한 것이기 때문에, DB 인스턴스를 수동으로 재부팅해주는 걸로 해결했다.
참고:
- MySQL Full-Text Search: http://www.w3resource.com/mysql/mysql-full-text-search-functions.php
- MySQL Full-Text Fine Tuning: http://dev.mysql.com/doc/refman/5.7/en/fulltext-fine-tuning.html
- AWS Working With Param Groups: http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html
반응형