MySQL全文索引-fulltext

搬瓦工机场JMS

MySQL 5.6 之前的版本只有MyISAM存储引擎支持全文索引,5.6 及之后的版本,InnoDB 才开始支持。全文索引相对于like %这种模糊查询效率更高,查询方式更多样,查询结果也更准确。在全文检索领域,全文索引功能非常有用,比如博客类网站,可以对文章标题,文章内容创建全文索引,用户可以根据关键词搜索想要的文章。
1、创建全文索引
能够创建全文索引的字段类型必须是char,varchar,text等这类字符文本类型。
创建一个带有全文索引的表:CREATE TABLE articles (           id INT UNSIGNED AUTO_INCREMENT NOT NULL  PRIMARY KEY,           title VARCHAR(200),           body TEXT,           FULLTEXT (title,body)         ) ENGINE=InnoDB;
通过ALTER TABLE创建、删除全文索引:# 创建全文索引ALTER TABLE articles ADD FULLTEXT KEY ft_title(title);
# 删除索引ALTER TABLE articles DROP INDEX ft_title;
2、查询全文索引
MySQL使用MATCH AGAINST语法来查询全文索引,支持自然语言和布尔类型两种查询模式。
自然语言模式查询:
示例:mysql> SELECT * FROM articles WHERE MATCH (title,body)  AGAINST (‘database’ IN NATURAL LANGUAGE MODE);+—-+——————-+——————————————+| id | title             | body                                      |+—-+——————-+——————————————+|  1 | MySQL Tutorial    | DBMS stands for DataBase …              ||  5 | MySQL vs. YourSQL | In the following database  comparison … |+—-+——————-+——————————————+2 rows in set (0.01 sec)

布尔类型模式查询:

  • +表示AND
  • -表示NOT
  • 没有符号的表示OR

示例:mysql> SELECT * FROM articles WHERE MATCH (title,body)  AGAINST (‘+MySQL -YourSQL’ IN BOOLEAN MODE);+—-+———————–+————————————-+| id | title                 | body                                 |+—-+———————–+————————————-+|  6 | MySQL Security        | When configured properly,  MySQL … ||  1 | MySQL Tutorial        | DBMS stands for DataBase …         ||  2 | How To Use MySQL Well | After you went through a  …        ||  3 | Optimizing MySQL      | In this tutorial we will  show …   ||  4 | 1001 MySQL Tricks     | 1. Never run mysqld as  root. 2. … |+—-+———————–+————————————-+5 rows in set (0.02 sec)
+MySQL表示必须包含MySQL-YourSQL表示必须不包含YourSQL
3、相关性得分
查询结果的相关性得分,通过计算查询词与索引匹配的相似度,计算得分,全文索引查询结果默认按相关性得分倒序排序。mysql> SELECT title,MATCH (title,body)  AGAINST (‘+MySQL  -YourSQL’ IN BOOLEAN MODE) as score FROM articles WHERE  MATCH (title,body)  AGAINST (‘+MySQL -YourSQL’ IN BOOLEAN  MODE);
+———————–+—————————-+| title                 | score                      |+———————–+—————————-+| MySQL Security        | 0.000000003771856604828372 || MySQL Tutorial        | 0.000000001885928302414186 || How To Use MySQL Well | 0.000000001885928302414186 || Optimizing MySQL      | 0.000000001885928302414186 || 1001 MySQL Tricks     | 0.000000001885928302414186 |+———————–+—————————-+5 rows in set (0.00 sec)
4、大小写敏感
如果字段的字符集校验规则是大小写敏感的,那么全文索引匹配时也是大小写敏感,否则就是大小写不敏感。通常校验规则名称带bin的都是大小写敏感的,比如utf8mb4_bin。名称带cs一般也是大小写敏感的,比如latin1_general_cs。名称带ci一般是大小写不敏感的,比如utf8mb4_general_ci。
5、支持中文
从MySQL 5.7.6开始,MySQL内置了ngram全文解析器,用来支持中文分词。设置全局变量 ngram_token_size=1,以支持单个字检索。创建全文索引时,加上WITH PARSER ngram,如下:
alter table blog add fulltext ft_title(title) WITH PARSER ngram;

未经允许不得转载:搬瓦工VPS_美国VPS » MySQL全文索引-fulltext

赞 (0) 打赏

相关推荐

    暂无内容!

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏