MySQL 全文索引与搜索
使用全文索引实现高效的中英文模糊搜索。 · 难度:入门 · +15XP
MySQL 全文索引
全文索引(FULLTEXT)专门用于文本内容的搜索,支持自然语言模式和布尔模式,比LIKE '%keyword%'高效得多。
创建全文索引
-- 建表时创建
CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title, body)
) ENGINE=InnoDB;
-- 后期添加
ALTER TABLE articles ADD FULLTEXT INDEX idx_fulltext (title, body);
搜索语法
自然语言模式:
SELECT * FROM articles WHERE MATCH(title, body) AGAINST('database' IN NATURAL LANGUAGE MODE);布尔模式:支持操作符+、-、*等。
SELECT * FROM articles WHERE MATCH(title, body) AGAINST('+MySQL -Oracle' IN BOOLEAN MODE);配置参数
最小词长度:innodb_ft_min_token_size(默认3),对于中文需要设置为1或2。MySQL 8.0支持ngram分词器,用于中文分词。
CREATE TABLE chinese_articles (
content TEXT,
FULLTEXT (content) WITH PARSER ngram
) ENGINE=InnoDB;练习提示
创建包含全文索引的文章表,插入多篇文档,使用不同模式搜索关键词并对比结果。