Qianfeng

DON'T WORRY BE HAPPY
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

mysql笔记18:全文本搜索

Posted on 2022-02-15 16:34  RonnieOS  阅读(72)  评论(0编辑  收藏  举报

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 布尔文本搜索(没有建立全文本搜索索引也可以用)
布尔文本搜索可以指定:

  1. 要匹配的词
  2. 要排斥的词
  3. 排列的优先级提示
  4. 表达式分组

示例用法:
select note_text from productnotes where match(note_text) against('heavy -rope' in boolean mode);
上述sql语句意味着,包含heavy但是不包含以rope开头的词的行。