MySQL学习笔记:全文本搜索

本文为本人学习书籍《MySQL必知必会》笔记系列,欢迎持续关注,有问题随时留言评论,一起探讨学习~

18 全文本搜索

并非所有搜索引擎都支持全文搜索。最常用的两个搜索引擎MyISAM(支持全文搜索)和InnoDB(不支持)。

18.1启用全文本搜索

将要全文本搜索的列添加索引:在创建表时指定FULLTEXT或者在已有数据表上立即索引。

18.2进行全文本搜索

  1. MATCH()指定被搜索的列,
  2. 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,降低后者的等级

发布了51 篇原创文章 · 获赞 34 · 访问量 882

猜你喜欢

转载自blog.csdn.net/weixin_43412569/article/details/104860695
今日推荐