MySQL必知必会-15MySQL全文搜索

MyISAM支持全文搜索,而InnoDB在MySQL 5.6.4开始支持。
性能,通配符和正则表达式匹配通常要求MySQL尝试匹配表中所有行(而且这些搜索极少使用表索引)
在使用全文本搜索时,MySQL不需要分别查看每个行,不需要分别分析和处理每个词。MySQL创建指定列中各词的一个索引,搜索可以针对这些词进行。MySQL可以快速有效地决定哪些词匹配(哪些行包含它们),哪些词不匹配,它们匹配的频率。

在索引之后,SELECT可与Match()和Against()一起使用以实际执行搜索。

启用全文本搜索支持
使用FULLTEXT指示对它进行索引,FULLTEXT可以索引单个列,也可以指定多个列。
在定义之后,MySQL自动维护该索引。在增加、更新或删除行时,索引随之自动更新。
可以在创建表时指定FULLTEXT,或者在稍后指定(这种情况下所有已有数据必须立即索引)

不要在导入数据时使用FULLTEXT
应该先导入所有数据,然后修改表定义FULLTEXT,有助于更快导入数据。

创建全文搜索的表
   
   
  1. CREATE TABLE productontes (
  2. note_id INT NOT NULL AUTO_INCREMENT,
  3. prod_id CHAR (10) NOT NULL,
  4. note_date datetime NOT NULL,
  5. note_text text NULL,
  6. PRIMARY KEY (note_id),
  7. FULLTEXT (note_text)
  8. ) ENGINE = MyISAM;


进行全文本搜索
在索引之后,使用两个函数Match()和Against()指定要使用的搜索表达式。
其中Match()指定被搜索的列,Against()指定要使用的搜索表达式。
   
   
  1. SELECT
  2. note_text
  3. FROM
  4. productnotes
  5. WHERE
  6. MATCH (note_text) AGAINST ('rabbit');
传递给Match()的值必须与FULLTEXT()定义中的相同。如果指定多个列,则必须列出它们(并且次序正确)

搜索不区分大小写
除非是用BINARY方式,否则全文本搜索不区分大小写。

全文本搜索排序
全文本搜索的一个重要部分就是对结果排序。具有较高的行先返回
   
   
  1. SELECT
  2. note_text,
  3. MATCH (note_text) AGAINST ('rabbit') AS rank
  4. FROM
  5. productnotes;
等级由MySQL根据行中词的数目、唯一词的数目、整个索引词的总数以及包含该词的行的数目的计算出来。

排序多个搜索项,如果指定多个搜索项,则包含多数匹配词的那些行将具有比包含较少词(或仅有一个匹配)的那些行高的等级。

让MySQL支持中文全文搜索
MySQL自带的ngram插件,用于支持中文、日语、韩语全文搜索,ngram在MySQL 5.7.6中引入。
创建表:
    
    
  1. CREATE TABLE articles (
  2. id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
  3. title VARCHAR(200),
  4. body TEXT,
  5. FULLTEXT (title,body) WITH PARSER ngram
  6. ) ENGINE=InnoDB CHARACTER SET utf8mb4;
或者修改表
    
    
  1. ALTER TABLE articles ADD FULLTEXT INDEX ft_index (title,body) WITH PARSER ngram;

官网教程:https://dev.mysql.com/doc/refman/5.7/en/fulltext-search-ngram.html
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值