注意事项
并非所有引擎都支持全文本搜索
两个最常使用的引擎为MyISAM和InnoDB,前者支持全文本搜索,而后者不支持。
之前的学习,我们使用LIKE关键字 通配操作符匹配文本(和部分文本)。以及,使用正则表达式进行复杂的文本匹配搜索。
为什么需要全文本搜索
1、性能,通配符和正则表达式需要对数据表的全部行进行匹配,性能上较慢;
2、查询,通配符和正则表达式更多的是一种模糊查询,能难精确控制匹配;
3、都不能提供一种智能化的选择结果的方法。
使用全文本搜索
启用全文本搜索支持
规则
在创建表时启用全文本搜索
列中有一个名为note_text的列,为了进行全文本搜索,MySQL根据子句FULLTEXT(note_text)的指示对它进行索引。
这里的FULLTEXT索引单个列,如果需要也可以指定多个列。
进行全文本搜索
SELECT note_text FROM productnotes WHERE Match(note_text) Against('rabbit');
Match(note_text)指示MySQL针对指定的列进行搜索,
Against(‘rabbit’)指定词rabbit作为搜索文本。
由于有两行包含词rabbit,这两个行被返回。
使用完整的 Match() 说 明
传递给 Match() 的值必须与FULLTEXT()定义中的相同。
如果指定多个列,则必须列出它们(而且次序正确)。
搜索不区分大小写
使用查询扩展
SELECT note_text FROM productnotes WHERE Match(note_text) Against('anvils');
SELECT note_text FROM productnotes WHERE Match(note_text) Against('anvils' WITH QUERY EXPANSION);
布尔文本搜索
SELECT note_text FROM productnotes WHERE Match(note_text) Against('heavy' IN BOOLEAN MODE);
SELECT note_text FROM productnotes WHERE Match(note_text) Against('heavy -rope*' IN BOOLEAN MODE);