【注】mysql最常用的引擎是MyISAM和InnoDB,前者支持全文本搜索,后者不支持
1. 实现全文本搜索
1)启用全文本搜索支持
方式1:用create table创建表时对想要进行全文本搜索的字段进行操作,如对note_text字段进行全文本搜索,FULLTEXT(note_text)。
定义之后,mysql自动维护该索引,在增加,更新或者删除行时,索引随之自动更新。
2)执行全文本搜索
sql语句格式:select note_text from 表 where match(note_text) against('rabbit');
【注】match函数指定被搜索的列,against函数指定要使用的搜索表达式,如上述例子就是搜索出含有rabbit字符串的所有note_text字段。
sql语句格式2:select note_text, match(note_text) against('rabbit') as rank from 表;
这种方式会将搜索结果作为一列返回,列值是一个等级值。
需要说明的是,虽然用like关键字同样可以实现对指定文本内容的搜索,但是全文本搜索的最大的好处是对结果排序,具有较高等级的行先返回。
2. 查询扩展
查询扩展目的是放宽全文本搜索结果的范围,不仅包含满足查询条件的结果,还返回与搜索有关的所有其他行。
sql语句格式:select note_text from 表 where match(note_text) against('anvils' with query expansion);