假设我们有一个名为 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
索引在某些情况下可能需要更多的存储空间,并且它使用不同的停用词列表和分词机制。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。