MYSQL 全文检索
限制条件
- 表必须是MyISAM或InnoDB存储引擎。
- 必须在一个或多个字符型列(CHAR、VARCHAR或TEXT)上创建一个全文索引(FULLTEXT)。
- 必须使用MATCH()和AGAINST()函数来执行全文查询。
全文检索模式
- 自然语言模式(NATURAL LANGUAGE MODE),这是默认的模式,它会根据相关性排序匹配的记录,并忽略常用词(如the、a等)。
- 布尔模式(BOOLEAN MODE),这是一个更灵活的模式,允许使用特殊字符来指定词语的出现或消失、权重、距离等条件。
示例
sql
-- create a table with fulltext index
CREATE TABLE articles (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200),
content TEXT,
FULLTEXT (title, content) -- 指定需要全文检索的字段
) ENGINE=InnoDB;
-- insert some data
INSERT INTO articles (title, content) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs PostgreSQL','MySQL is as good as PostgreSQL');
-- query using natural language mode
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('database');
-- query using boolean mode
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('+MySQL -PostgreSQL' IN BOOLEAN MODE);