文档章节

MySql全文索引详解

guquanjiang
 guquanjiang
发布于 2017/03/24 23:09
字数 1195
阅读 774
收藏 0

##MySql全文索引详解

InnoDB引擎对FULLTEXT索引的支持是MySQL5.6新引入的特性,之前只有MyISAM引擎支持FULLTEXT索引。所谓全文索引,是一种通过建立倒排索引,快速匹配文档的方式。对于FULLTEXT索引的内容可以使用MATCH(column)…AGAINST(val)语法进行查询。

###MySQL支持三种模式的全文检索模式:

  • 自然语言模式IN NATURAL LANGUAGE MODE),即通过MATCH AGAINST 传递某个特定的字符串来进行检索。该模式是MySQL默认使用的。
  • 布尔模式IN BOOLEAN MODE),可以为检索的字符串增加操作符,例如“+”表示必须包含,“-”表示不包含,“*”表示通配符(这种情况, 即使传递的字符串较小或出现在停词中,也不会被过滤掉),其他还有很多特殊的布尔操作符, 具体可参考官方文档
  • 查询扩展模式WITH QUERY EXPANSION), 这种模式是自然语言模式下的一个变种,会执行两次检索,第一次使用给定的短语进行检索,第二次是结合第一次相关性比较高的行进行检索。

###注意点

  • 目前MySQL支持在CHAR、VARCHAR、TEXT类型的列上定义全文索引。全文索引以词为基础的,MySQL默认的分词是所有非字母和数字的特殊符号都是分词符,包含空格。
  • MySQL指定了最小字符长度,默认是4,必须要匹配大于4的才会有返回结果,可以用SHOW VARIABLES LIKE 'ft_min_word_len' 来查看指定的字符长度,也可以在mysql配置文件my.ini 更改最小字符长度,方法是在my.ini 增加一行 比如:ft_min_word_len = 2,改完后重启mysql即可
  • MySQL在集合查询中的对每个合适的词都会先计算它们的权重,一个出现在多个文档中的词将有较低的权重(可能甚至有一个零权重),因为在这个特定的集中,它有较低的语义值。否则,如果词是较少的,它将得到一个较高的权重,mysql默认的阀值是50%。如果不考虑权重,可以使用MySQL提供的布尔全文检索。

###创建全文索引:

  • ALTER TABLE table ADD FULLTEXT INDEX idxName(column1(len),column2(len)..)
  • CREATE FULLTEXT INDEX idxName ON table (column((len)))

###删除索引

  • ALTER TABLE table DROP INDEX idxName
  • DROP INDEX idxName ON table

###示例

	SELECT title from tmp WHERE MATCH(title) AGAINST('今日头条')

"" 2. 空(也就是默认情况),表示可选的,包含该词的顺序较高

  SELECT title from t_full_text WHERE MATCH(title) AGAINST('今日头条 火箭赢了')

Alt text 3. +用在词的前面,表示一定要包含该词,并且必须在开始位置 -不包含该词,不能单独使用

   SELECT title from tmpWHERE MATCH(title) AGAINST('+今日头条 -NBA' IN BOOLEAN MODE)

Alt text 4. 匹配度高的排前面

SELECT title from t_full_text WHERE MATCH(title) AGAINST('+今日头条 NBA' IN BOOLEAN MODE)

Alt text PS:匹配度高的排前面 5. ~表示拥有该字会降低相关性,如果同时包含~后面的字符,排名就会靠后

 SELECT title from t_full_text WHERE MATCH(title) AGAINST('今日头条 ~NBA' IN BOOLEAN MODE)

Alt text](https://static.oschina.net/uploads/img/201703/24231216_2CIS.png "在这里输入图片标题") 6. ""整体匹配,用双引号将一段句子包起来表示要完全相符,不可拆字。

SELECT title from t_full_text WHERE MATCH(title) AGAINST('"今日头条 UC头条"' IN BOOLEAN MODE)

Alt text 7. > :提高该字的相关性,查询的结果会排在比较靠前的位置。

SELECT title from t_full_text WHERE MATCH(title) AGAINST('+今日头条 >NBA' IN BOOLEAN MODE)

Alt text 8. < :降低相关性,查询的结果会排在比较靠后的位置

SELECT title from t_full_text WHERE MATCH(title) AGAINST('+今日头条 <NBA' IN BOOLEAN MODE)

Alt text 9. <>两者结合使用

SELECT title from t_full_text WHERE MATCH(title) AGAINST('+今日头条 >NBA <火箭赢了' IN BOOLEAN MODE)

Alt text 10. ()使用,可以通过括号来使用字条件。

SELECT title from t_full_text WHERE MATCH(title) AGAINST('+今日头条 +(>NBA <火箭赢了)' IN BOOLEAN MODE)

Alt text PS: 找到有今日头条&NBA&火箭赢了,今日头条&NBA或者今日头条&火箭赢了的数据,然后排序规则为:今日头条&NBA > 今日头条&NBA&火箭赢了 > 今日头条&火箭赢了。

  1. * :通配符,前后都有通配符
SELECT title from t_full_text WHERE MATCH(title) AGAINST('*今日头条*' IN BOOLEAN MODE)

Alt text 12. 前面有通配符

SELECT title from t_full_text WHERE MATCH(title) AGAINST('*今日头条' IN BOOLEAN MODE)

Alt text 13. 后面有通配符

SELECT title from t_full_text WHERE MATCH(title) AGAINST('今日头条*' IN BOOLEAN MODE)

Alt text

© 著作权归作者所有

上一篇: MySQL索引原理
下一篇: ReentrantLock分析
guquanjiang
粉丝 5
博文 10
码字总数 9544
作品 0
浦东
程序员
私信 提问
MySQL札记13_数据库引擎Engine

在MySQL数据库中常用的引擎有两种:和。其他的还有 MySQL数据库引擎 mysql数据库引擎常用面试总结 MySQL的InnoDB原理详解 B+Tree index structures in InnoDB 什么是存储引擎 MySQL中的数据用...

皮皮大
08/04
0
0
MySQL Index详解

①MySQL Index 一、SHOW INDEX会返回以下字段 1、Table 表的名称。 2、 Non_unique 如果索引不能包括重复词,则为0,如果可以则为1。 3、 Key_name 索引的名称 4、 Seqinindex 索引中的列序列号...

雾妄
2016/12/22
18
0
MySQL存储引擎中的MyISAM和InnoDB区别详解

在使用MySQL的过程中对MyISAM和InnoDB这两个概念存在了些疑问,到底两者引擎有何分别一直是存在我心中的疑问。为了解开这个谜题,搜寻了网络,找到了如下信息: MyISAM是MySQL的默认数据库引...

旋转木马-千里马
2016/09/11
19
0
最全面的 MySQL 索引详解

什么是索引? 1、索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据。对于索引,会保存在额外的文件中。 2、索引,是数据库中专门用于帮助用户快速查询...

javaer
2016/10/09
37
0
「mysql优化专题」本专题总结终章(13)

一个月过去了,【mysql优化专题】围绕着mysql优化进行了十三篇的优化文章,下面进行一次完整的总结!我尝试用最简短最通俗易懂的话阐述明白每篇文章,让本专题画上完美的句号!坚持到文末,留...

java进阶架构师
2018/01/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

教你玩转Linux—添加批量用户

添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加,必然要找一种简便的创建大量用户...

xiangyunyan
31分钟前
6
0
返回提示信息,如:xxx创建成功!

【服务端】在输出的方法块中,加入要输出的字段(qcm_batch_id) QCMUserType.cs: public struct QCM_Custom_Create_Batch_Out_Tag { public BASCoreType.Cmn_Out_T......

_Somuns
31分钟前
6
0
Aliyun Serverless VSCode Extension v1.12.0 发布

Aliyun Serverless VSCode Extension 是阿里云 Serverless 产品 函数计算 Function Compute 的 VSCode 插件,该插件结合了函数计算 Fun 工具以及函数计算 SDK ,是一款 VSCode 图形化开发调试...

阿里云官方博客
32分钟前
6
0
程序员如何培养解决复杂问题的能力?

今天在上网时候,突然看到了这篇文章,感觉非常的适合现在的自己去思考下,可能也适用在座的读者。程序员不仅仅是敲代码,更是一个复合能力的结合体,也不仅仅停留在技术和代码阶段。你想要成...

哥本哈根的小哥
35分钟前
8
0
市场变化驱动产品思维升级

宜信科技中心财富管理产品部负责人Bob,与大家一起聊聊个性化推荐产品功能的设计和B端产品的功能策划方式。 拓展阅读:回归架构本质,重新理解微服务 智慧金融时代,大数据和AI如何为业务赋能...

宜信技术学院
36分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部