微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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存储引擎。但有几点需要注意:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐