本文为本人学习书籍《MySQL必知必会》笔记系列,欢迎持续关注,有问题随时留言评论,一起探讨学习~
18 全文本搜索
并非所有搜索引擎都支持全文搜索。最常用的两个搜索引擎MyISAM(支持全文搜索)和InnoDB(不支持)。
18.1启用全文本搜索
将要全文本搜索的列添加索引:在创建表时指定FULLTEXT或者在已有数据表上立即索引。
18.2进行全文本搜索
- MATCH()指定被搜索的列,
- AGAINST()指定要搜索的表达式
#全文本搜索在text列中包含'武汉'的行
SELECT text
FROM weibo
WHERE MATCH(text) Against('武汉');
使用LIKE也可完成上述搜索
SELECT COUNT(text)
FROM weibo
WHERE text LIKE '%武汉%';
18.3查询扩展
查询扩展用来设法放宽返回的全文本搜索的结果的范围。
例如查找与“武汉”相关的行,不一定包含武汉,但可能相关。
SELECT text
FROM weibo
WHERE MATCH(text) Against('武汉'WITH QUERY EXPANSION);
18.4布尔值搜索
下面举几个例子,说明某些操作符如何使用:
SELECT note_ text
FROM productnotes
WHERE Match(note_text) Against('rabbit-bait' IN BOOLEAN MODE);
匹配rabbit,排除bait
SELECT note_ text
FROM productnotes
WHERE Match(note_text) Against(' +rabbit +bait' IN BOOLEAN MODE);
这个搜索匹配包含词rabbit和bait的行。
SELECT note_ text
FROM productnotes
WHERE Match(note_text) Against (' rbbit bait' IN BOOLEAN MODE);
没有指定操作符,这个搜索匹配包含rabit和bait中的至少一个词的行。
SELECT note_ text
FROM productnotes
WHERE Match(note_text) Against('"rabbit bait"' IN BOOLEAN MODE);
这个搜索匹配短语rabbit bait而不是匹配两个词rabbit和bait。
SELECT note_ text
FROM productnotes
WHERE Match(note_text) Against('>rabbit <carrot' IN BOOLEAN MODE);
匹配rabbit和carrot, 增加前者的等级,降低后者的等级。
SELECT note_ text
FROM productnotes
WHERE Match(note_text) Against('+safe+(combination)' IN BOOLEAN MODE);
这个搜索匹配词safe和combination,降低后者的等级