MySQL全文索引的布尔搜索使用介绍
假设我们有一个名为 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存储引擎。但有几点需要注意:
-
版本限制:InnoDB存储引擎从MySQL 5.6版本开始支持
FULLTEXT
索引。在此版本之前,只有MyISAM存储引擎支持FULLTEXT
索引。因此,如果你使用的是MySQL 5.6或更高版本,这些示例应该适用。 -
性能与存储:虽然InnoDB和MyISAM都支持
FULLTEXT
索引,但两者在索引的实现和性能优化上存在一些差异。例如,InnoDB的FULLTEXT
索引在某些情况下可能需要更多的存储空间,并且它使用不同的停用词列表和分词机制。