[My SQL] 全文本搜索

全文本搜索不同于通配符和正则表达式搜索,它使用索引进行搜索,相比于前两者更高效,结果更加智能。

之前已经了解过,对于最常见的两种引擎MyISAM和InnoDB来说,前者支持全文本搜索,而后者不支持。


为了支持全文本搜索,必须定义被索引的列。一般在创建表时启用全文本搜索

我们假设要创建一个productnotes的表:


在这张表的定义中,我们使用FULLTEXT(note_text)定义了被索引的列为note_text,注意引擎一定要选择支持全文本操作的MyISAM。

表的内容如下:


定义了全文本搜索之后,无论后续表会进行插入、更新或者删除,note_text这一列都会进行自动的索引。

在建立索引之后,使用Match()和Aganist()来进行全文本搜索,Match()指定被搜索的列,Aganist()指定要搜索的表达式。

如我们要索引note_text列包含rabbit的行:


结果返回了包含rabbit的两行数据,并且是有序输出。

传递给Match的值必须是定义的索引列,且全文本搜索是不区分大小写的,使用rabbit也可以搜索到RAbbit。

使用查询扩展

查询扩展可以搜索到更多的行,甚至这些行不包含rabbit。


可以看到使用了WITH QUERY EXPANSION的全文本搜索,输出了6行数据,首先前两行是包含rabbit的行,其他都是包含了前两行中其他词的行。

布尔文本搜索

全文本搜索的另一种方式是布尔文本搜索,常用的布尔操作符如下:


搜索包含rabbit和bait的行:


搜索包含rabbit bait这个短语的行:


搜索rabbit和carrot,增加前者等级,降低后者等级:



使用全文本搜索的几个说明:

50%规则:如果表的行数少于三行,则全文本搜索不返回结果;

单引号:忽略词中的单引号,don't的索引为dont;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值