Skip to content
On this page

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);

Released under the MIT License.