MySQL全文索引的布尔搜索使用介绍

发布时间 2023-08-11 15:06:22作者: 夏威夷8080

假设我们有一个名为 articles 的数据表,其中有一个名为 content 的列,用于存储新闻文章的文本内容。这个列已经建立了FULLTEXT索引。

ALTER TABLE articles ADD FULLTEXT(content);

示例1:使用AND操作符

要找出同时包含“apple”和“banana”的文章,可以这样查询:

SELECT * FROM articles WHERE MATCH(content) AGAINST('+apple +banana' IN BOOLEAN MODE);

+ 符号表示该单词必须出现在结果中。

示例2:使用OR操作符

要找出包含“apple”或“banana”(或两者都有)的文章,可以这样查询:

 
SELECT * FROM articles WHERE MATCH(content) AGAINST('apple banana' IN BOOLEAN MODE);

在布尔模式下,默认的行为就像使用OR操作符。

示例3:使用NOT操作符

要找出包含“apple”但不包含“banana”的文章,可以这样查询:

 
SELECT * FROM articles WHERE MATCH(content) AGAINST('+apple -banana' IN BOOLEAN MODE);

- 符号表示该单词不能出现在结果中。

示例4:使用通配符

布尔搜索还支持通配符*,它可以匹配任意数量的字符。例如,要找出以“appl”开头的任何词的文章,如“apple”,“application”等:

 
SELECT * FROM articles WHERE MATCH(content) AGAINST('appl*' IN BOOLEAN MODE);

 

示例5:短语搜索

要找出包含短语“red apple”的文章,你可以用双引号将短语括起来:

SELECT * FROM articles WHERE MATCH(content) AGAINST('"red apple"' IN BOOLEAN MODE);

以上是布尔搜索的一些基本示例。当然,这只是表面上的内容,实际上可以使用更复杂的组合来满足各种搜索需求。

补充说明

上述FULLTEXT搜索示例适用于MySQL的InnoDB存储引擎。但有几点需要注意:

  1. 版本限制:InnoDB存储引擎从MySQL 5.6版本开始支持FULLTEXT索引。在此版本之前,只有MyISAM存储引擎支持FULLTEXT索引。因此,如果你使用的是MySQL 5.6或更高版本,这些示例应该适用。

  2. 性能与存储:虽然InnoDB和MyISAM都支持FULLTEXT索引,但两者在索引的实现和性能优化上存在一些差异。例如,InnoDB的FULLTEXT索引在某些情况下可能需要更多的存储空间,并且它使用不同的停用词列表和分词机制。