How to implement full text search in MySQL
· Category: SQL & Databases
Short answer
MySQL supports full-text search through FULLTEXT indexes on CHAR, VARCHAR, and TEXT columns, queried with MATCH ... AGAINST.
Steps
- Create a full-text index:
CREATE FULLTEXT INDEX idx_content ON articles(content); - Search with natural language:
SELECT * FROM articles WHERE MATCH(content) AGAINST('database optimization'); - Use boolean mode for advanced operators:
AGAINST('+MySQL -Oracle' IN BOOLEAN MODE); - Search multiple columns:
MATCH(title, content) AGAINST('search term') - Rank results by relevance:
SELECT *, MATCH(content) AGAINST('term') AS relevance FROM articles ORDER BY relevance DESC;
Tips
- Use InnoDB full-text search for transactional consistency.
- Set
ft_min_word_lenorinnodb_ft_min_token_sizeto include short words.
Common issues
- Stopwords and short words are ignored by default, which may surprise users searching for common terms.
- Full-text indexes require sufficient data to produce meaningful relevance scores.r