MySQL5.6부터는 InnoDB에서도 전문검색이 가능하기는 하였지만 공백 기준으로 단어들이 파싱이 되는 “MeCab Full-Text Parser Plugin” 방이라 아쉬움이 많았다. 특히 한국말처럼 공뱁만으로 단어를 파싱할수 없는 그런 언어들이 있기때문이죠.
그런데 MySQL 5.7부터는 n-gram 방식의 전문 검색 인덱스를 지원하면서, 한국어/중국어/일본어에서도 효율적인 전문 검색이 가능하게 되었습니다. 물론 mroonga와 같은 Third party 스토리지 엔진을 설치해서 사용을 할 수 있겠지만.. 백업/복구가 늘 이슈가 늘 따라죠.
알아보고자 하는건 N-GRAM 이죠
메뉴얼 내용을 인용하면, 컨텐츠의 인덱스를 아래와 같이 첫글자/두글자..(1그램,2그램,3그램..) 등등으로 나누어서 파싱하여 전문검색 인덱스를 만드는 것이라고 생각하면 됩니다.
5.7 이하에서는 공백을 기준으로 분할 했었죠mysql 에서 sql 검색시에는 검색이 안되었지만 .. |
N-GRAM 사용햇을경우는 최소 토큰 사이즈(ngram_token_size)는 2이고, 위에서 “n=2″ 부터 토큰을 만들게 됩니다. 당연한 이야기겠지만, n-수치가 낮을수록 토큰 수가 많아질 것이기에, 모든 검색어들이 3글자부터 시작된다면 이 수치를 3으로 상향 조정하는 것도 인덱싱 관리 및 사이즈 안정성에 도움이 됩니다. mysql> SELECT * FROM articles WHERE MATCH(title) AGAINST('sql' IN BOOLEAN MODE); +------------+--------+ | FTS_DOC_ID | title | +------------+--------+ | 1 | my sql | | 2 | my sql | | 3 | mysql | +------------+--------+ 3 rows in set (0.00 sec) 와일드 카드를 사용한 검색 |