什么是MySQL中的全文检索?

MySQL中的全文检索可以对文本字段执行非常快速的文本搜索,用于管理大量文本数据。
具有以下特点:

  1. 基于自然语言,分词解析文本内容。
  2. 使用倒排索引,搜索效率较高。
  3. 支持针对文本进行布尔文本、通配符文本、词语匹配等复杂查询。
  4. 使用专用的MATCH操作符进行全文搜索。

全文检索相关参数:

  • ft_min_word_len:最小词长,小于此长度的词不会被索引。
  • ft_max_word_len:最大词长,大于此长度的词不会被索引。
  • ft_boolean_syntax:设置布尔语法类型。
  • innodb_ft_aux_table:辅助表参数。
  • innodb_ft_enable_stopword:停止词过滤设置。

创建全文索引语法:

sql
CREATE TABLE articles(
    id INT PRIMARY KEY, 
    title VARCHAR(200),
    body TEXT,
    FULLTEXT(title,body)  # 创建全文索引
) ENGINE=InnoDB;

执行全文搜索:

sql
SELECT * 
FROM articles 
WHERE MATCH(title,body) 
AGAINST('database' IN BOOLEAN MODE);

示例:

sql
CREATE TABLE articles(
    id INT PRIMARY KEY,
    title VARCHAR(200), 
    body TEXT,
    FULLTEXT(title,body)
) ENGINE=InnoDB;

INSERT INTO articles 
VALUES(1,'MySQL Tutorial','MySQL is very popular database'),
      (2,'How To Use MySQL Well','Here are some tips to use MySQL well'),
      (3,'MySQL vs MongoDB','MySQL is better than MongoDB for relational data');

SELECT * 
FROM articles
WHERE MATCH(title,body)  
AGAINST('MySQL' IN BOOLEAN MODE);

输出:

+----+--------------------+-------------------------------+
| id | title              | body                          | 
+----+--------------------+-------------------------------+
|  1 | MySQL Tutorial     | MySQL is very popular database|
|  2 | How To Use MySQL Well| Here are some tips to use   |
|MySQL well| 
|  3 | MySQL vs MongoDB   | MySQL is better than MongoDB  |
|for relational data |  
+----+--------------------+-------------------------------+