18.1 理解全文本搜索
mysql指出几种不同的数据库引擎,包括myisam和innodb,前者支持全文本搜素,但是后者不指出。
全文本搜索的关键词是fulltext。
18.2 何时定义fulltext
如果你正在导入数据到一个新表,先不要启用fulltext索引,因为这样数据库会一条一条维护索引。应当在数据导入完毕后,一次性建立全文本索引。
18.3 全文本搜索的格式
在对某列建立索引之后,全文本搜索主要使用match()和against()两个函数,如下:
select note_text from products where match(note_text) against('rabbit');
其中的match指定被搜索的列,而against指定搜索模式串
除非使用binary方式,否则全文本搜索不区分大小写。
18.4 将match()和aginst()作为计算字段
select note_text , match(note_text) against('rabbit') as rank from products;
18.4 放宽条件的扩展全文本查询(with query expansion)
原理:进行两次查询,第一次用模式串进行全文本查询,然后统计有用的词,第二次再用这些有用的此进行一次查询。
18.5 布尔文本搜索(没有建立全文本搜索索引也可以用)
布尔文本搜索可以指定:
- 要匹配的词
- 要排斥的词
- 排列的优先级提示
- 表达式分组
示例用法:
select note_text from productnotes where match(note_text) against('heavy -rope' in boolean mode);
上述sql语句意味着,包含heavy但是不包含以rope开头的词的行。