전문 검색이란 문서 전체에 대한 분석과 검색을 위한 인덱싱 알고리즘이다. 문서의 내용 전체를 인덱스화해서 특정 키워드가 포함된 문서를 검색하는 것을 의미한다. InnoDB나 MyISAM 스토리지 엔진에서 제공하는 일반적인 B-Tree에선 전문 검색을 할 수 없다.
MySQL 전문 검색 인덱스는 다음 두 과정을 거쳐 색인 작업이 수행된다.
To be or not to be. That is the question
To | To | ||||||
---|---|---|---|---|---|---|---|
be | be | ||||||
or | or | ||||||
not | no | ot | |||||
to | to | ||||||
be | be | ||||||
That | Th | ha | at | ||||
is | is | ||||||
the | th | he | |||||
question | qu | ue | es | st | ti | io | on |
information_schema.innodb_ft_default_stopword
테이블에서 확인할 수 있다.ft_stopword_file
시스템 변수를 빈 문자열로 설정하면 된다. ft_stopword_file=''
ft_stopword_file
변수에 불용어 목록 파일을 적용하면 된다.innodb_ft_enable_stopword
시스템 변수를 OFF로 설정ft_stopword_file=’/data/my_custom_stopworld.txt’
innodb_ft_server_stopword_table
시스템 변수에 설정하면 된다. CREATE TABLE my_stopword(value VARCHAR(30)) ENGINE = INNODB;
INSERT INTO my_stopword(value) VALUES ('MySQL');
SET GLOBAL innodb_ft_server_stopword_table-'mydb/my_stopword';
ALTER TABLE tb_bi_gram
ADD FULLTEXT INDEX fx_title_body(title, body) WITH PARSER ngram;
innodb_ft_user_stopword_table
시스템 변수 이용
innodb_ft_server_stopword_table
시스템 변수와 사용 방법은 동일하다.MATCH … AGAINST …
)을 사용doc_body
칼럼에 전문 검색 인덱스 생성CREATE TABLE tb_test (
doc_id INT,
doc_body TEXT,
PRIMARY KEY (doc_id),
FULLTEXT KEY fx_docbody (doc_body) WITH PARSER ngram
) ENGINE=InnoDB;
MATCH … AGAINST …
구문을 이용해 쿼리 작성SELECT * FROM tb_test WHERE MATCH(doc_body) AGAINST('애플' IN BOOLEAN MODE);
LIKE ‘%애플%’
로 검색하면 전문 검색 인덱스가 아닌 풀 테이블 스캔으로 쿼리를 처리한다.