Intro


12.1.1 전문 검색 인덱스의 생성과 검색


/* DDL */
CREATE TABLE tb_bi_gram (
	...
	title VARCHAR(100),
	body TEXT,
	...
	FULLTEXT INDEX fx_msg(title, body) WITH PARSER ngram
);

12.1.2 전문 검색 쿼리 모드


/* **natural language mode** - 단어 포함 미포함만 확인 */
SELECT id, title, body,
	MATCH(title, body) AGAINST ('MySQL' IN NATURAL LANGUAGE MODE) AS score
FROM tb_bi_gram
WHERE MATCH(title, body) AGAINST ('MySQL' IN NATURAL LANGUAGE MODE)

/* **boolean mode** */
SELECT COUNT(*) FROM tb_bi_gram
WHERE MATCH(title, body) AGAINST ('단편' IN BOOLEAN MODE);

/* boolean mode 의 논리적 연산 */
/* 포함, 미포함 기능 - '+': 포함, '-': 미포함 */
SELECT id, title, body,
	MATCH(title, body) AGAINST('+MySQL -manual' IN BOOLEAN MODE) AS score
FROM tb_bi_gram
WHERE MATCH(title, body) AGAINST('+MySQL -manual' IN BOOLEAN MODE)

/* "" 는 하나의 단어 취급 */
SELECT id, title, body,
	MATCH(title, body) AGAINST('+"MySQL man"' IN BOOLEAN MODE) AS score
FROM tb_bi_gram
WHERE MATCH(title, body) AGAINST('+"MySQL man"' IN BOOLEAN MODE)

/* query expansion */
SELECT * FROM tb_bi_gram
WHERE MATCH(TITLE, BODY) AGAINST('database' WITH QUERY EXPANSION)