##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('今日头条 火箭赢了')

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

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

4. 匹配度高的排前面

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

PS:匹配度高的排前面

5. ~表示拥有该字会降低相关性,如果同时包含~后面的字符,排名就会靠后

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

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

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

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

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

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

9. <>两者结合使用

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

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

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

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

* :通配符,前后都有通配符

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

12. 前面有通配符

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

13. 后面有通配符

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

mysql自带的全文索引_MySql全文索引详解相关推荐

  1. mysql 用大于等于代替大于_mysql使用详解

    Pick a Delimiter  选择分隔符:这一般都是在存储过程中用 现在我们需要一个分隔符,实现这个步骤的SQL语句如下: DELIMITER // 例如: mysql> DELIMITE ...

  2. mysql explain key为空_MySQL Explain详解

    在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有 ...

  3. mysql range代表什么意思_MYSQL explain详解之range

    explain显示了MySQL如何使用索引来处理DML语句以及连接表,explain显示的信息可以帮助选择更好的索引和写出更优化的查询语句 2.EXPLAIN列的解释: table:显示这一行的数据是 ...

  4. MySQL数据库增删改查常用语句详解

    MySQL数据库增删改查常用语句详解 一 MySQL数据库表结构 1.1 常见数据类型 1.2 常用约束类型 1.3 MySQL存储引擎 二 DDL语句:数据定义语句 2.1 修改数据库密码 2.1. ...

  5. MySQL批量入库的几种方式详解

    MySQL批量入库的几种方式详解 1. MySQL批量入库概述 2. Hutool封装jdbc方式 3. Jdbc直接或批量执行方式 4. MyBatis批量入库方式 5. MySQL批量入库总结 1 ...

  6. jdbc mysql 自动重连_JDBC实现Mysql自动重连机制的方法详解

    JDBC是Java程序连接和访问各种数据库的API,它可以提供Java程序和各种数据库之间的连接服务,下面是爱站技术频道小编为大家带来的JDBC实现Mysql自动重连机制的方法详解. 日志:using ...

  7. mysql主从同步默认延迟_减少mysql主从数据同步延迟问题的详解

    基于局域网的master/slave机制在通常情况下已经可以满足'实时'备份的要求了.如果延迟比较大,就先确认以下几个因素: 1. 网络延迟 2. master负载 3. slave负载 一般的做法是 ...

  8. mysql8.0.20 64位安装教程_windows 64位下MySQL 8.0.15安装教程图文详解

    先去官网下载点击的MySQL的下载 下载完成后解压 解压完是这个样子 配置系统环境变量 复制解压后的mysql到C盘或者其他磁盘下 我们去系统的环境变量的path里添加一个mysql的配置  指向my ...

  9. mysql weekofmonth_深入mysql YEAR() MONTH() DAYOFMONTH()日期函数的详解

    深入mysql YEAR() MONTH() DAYOFMONTH()日期函数的详解 mysql的日期函数. 例子中当前日期:curdate() 是2013年6月24日. YEAR() :显示年mys ...

  10. MySQL常用操作之创建存储过程语法详解

    MySQL常用操作之创建存储过程语法详解 前言 简介 语法 创建结构 变量结构 入参变量和出参变量 流程控制 判断(IF 语句) 判断(CASE 语句) 循环(LOOP 语句) 循环(WHILE 语句 ...

最新文章

  1. UI培训分享:导航栏UI设计规范及注意事项有哪些?
  2. [转载]IT知识体系结构图
  3. Wireshark安装失败或找不到网络接口问题
  4. 正则不等于一个字符串_乳饮料不等于酸奶,记住一个关键词,花最少的钱买到真正的好酸奶...
  5. 支付宝 PEM routines:PEM_read_bio:no start line
  6. ubuntu设置始终亮屏_ubuntu设置关闭屏幕和锁定
  7. CCF 201503-2 数字排序
  8. Activity跳转与返回
  9. 转:基于AOP实现Ibatis的缓存配置过期策略
  10. 跨域请求的常用方式及解释
  11. 电子工业出版社博文视点在上海第六届UPA中国用户可用性大会上
  12. PAT 1013 数素数
  13. [iOS]delegate和protocol
  14. ArcGIS教程:Arcmap技巧总结
  15. 游戏运行库java下载官网_游戏运行库合集安装包(Visual C++,Microsoft .NET,Microsoft XNA,Microsoft XML等几十种)...
  16. Android 权限清单大全
  17. java word 分页显示_java使用freemaker 导出word 包含分页,表格循环,word改xml格式化...
  18. Unity3D基础数学向量
  19. ips细胞技术治疗尿毒症最新进展
  20. 对于机器学习的几点理解

热门文章

  1. POI设置excle单元格样式
  2. 战略、业务流程和知识管理
  3. 【HTTP】Fiddler(一) - Fiddler简介和使用
  4. 使用jQuery.form插件,实现完美的表单异步提交
  5. 用“看板图”实现敏捷项目的可视化
  6. 项目过程中的部分逻辑
  7. linux TP 阿帕奇 数据库 php的安装
  8. 数据库之SQL(该列没有包含在聚合函数或 GROUP BY 子句中)
  9. 阿里云 oss 图片在 img 中访问失败,浏览器中正常访问
  10. undefined: resolver.BuildOption