##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全文索引怎么做?| 教程分享

    - 点击上方"爱数据学习社"关注我们吧! - 文末领取[商业分析资料] 为什么要用全文索引 我们在用一个东西前,得知道为什么要用它,使用全文索引无非有以下原因: like查询太慢. ...

  2. mysql 事务 注意 优化_MySQL入门详解——事务、锁、优化

    MySQL事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在一个商城系统中,用户执行购买操作,那么用户订单中应该加一条,库存要减一条,如果这两步由于意外只进行了其中一步那么就会发生 ...

  3. mysql 事务 注意 优化_MySQL入门详解(二)---mysql事务、锁、以及优化

    MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在一个商城系统中,用户执行购买操作,那么用户订单中应该加一条,库存要减一条,如果这两步由于意外只进行了其中一步那么就会发生很大的问题.而事 ...

  4. mysql explain ref列_MySQL EXPLAIN详解

    MySQL EXPLAIN详解:http://www.jianshu.com/p/ea3fc71fdc45 MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,该文主要讲解explain命令 ...

  5. mysql 客户端连接日志_MySQL 日志详解

    一.MySQL 日志分类 MySQL 日志主要包含:错误日志.查询日志.慢查询日志.事务日志.二进制日志. 错误日志: -log-err (记录启动.运行.停止 MySQL 服务时出现的信息) 查询日 ...

  6. mysql索引详解_MySQL索引详解

    导读:大家都知道,一个MySQL数据库能够储存大量的数据,如果要查找那一个数据,就得费好大劲从一大堆的数据中找到,即费时间又费力气,这时,索引的出现就大大减轻了数据库管理员的工作.本文介绍了数据库索引 ...

  7. 数据库 mysql详解_MySQL数据库详解

    一.数据库概述 1.数据库与文件系统文件系统对比. 数据冗余和不一致性 数据访问 数据格式相对独立 数据完整性和原子性 数据的并发访问 数据的安全性问题 2.数据库概念 1.DBMS:数据库管理系统 ...

  8. 2005数据库导入mysql没有主键_mysql数据库详解(续二)

    mysql数据库登陆问题解决汇总 首先需要说明一下,MYSQL数据库登陆的方式,通常就是本地登陆(localhost)和远程登陆,那么这里在深入地了解一部localhost和127.0.0.1的区别是 ...

  9. mysql索引key值_Mysql索引详解及优化(key和index区别)

    1.普通索引(加快对数据的访问速度) –直接创建索引(length表示使用名称前1ength个字符) create index index_name on table_name(字段名(length) ...

  10. mysql 优化详解_MySQL 优化详解

    1.缓存池 MySQL的设计是通过缓存池的方式的,也就是说将一部分的数据都储存到内存中,当我们查找一个数据的时候,如果发现在缓存池中的时候,就能够直接的 从缓存中获取,如果不在的话,那么就去磁盘中加载 ...

最新文章

  1. CMD命令,常驻内存的与外部的介绍 还有CMD格式化
  2. mysql数据库从删库到跑路之mysql多表查询
  3. 什么时候出python4_什么?Python4要来了?快来看看Python之父怎么说
  4. 常见的 HTTP 状态代码及原因
  5. Windows Server 2016 Technical Preview 4 (x64) 简体中文版下载!
  6. mysql 控制台环境下查询中文数据乱码,插入、更新中文数据不成功
  7. [poj 2796]单调栈
  8. 把项目通过maven生产源码包和文档包并发布到自己的私服上
  9. sql server 中某个字段值合并【转】
  10. weka下载安装以及源码运行
  11. DiskPart介绍
  12. 【日常训练赛】C - Prove Him Wrong
  13. ubuntu下创建手机可用的热点wifi
  14. 啊~啊~,麻婆豆~腐,麻婆豆~腐~
  15. 衡水二中2021清华北大高考成绩查询,衡水二中成为“清华大学2020年优质生源中学”...
  16. TensorFlow: A System for Large-Scale Machine Learning翻译
  17. 免费分享下载最新全国省市区县和乡镇街道行政区划矢量边界坐标经纬度地图数据 shp geojson json sql格式
  18. vue项目使用yxg-xlsx-style组件将表格数据导出带有样式的excel文件
  19. php的视频怎么保存,premiere怎么保存剪辑好的视频
  20. CentOS系统中安装QQ2012

热门文章

  1. html5+css3.5手机站标准写法,移动端手机网站基本模板
  2. 快递单号的正则提取试
  3. 站长咪咪网整理的Linux命令大全
  4. SPF算法计算过程--例
  5. 干货 | 携程Elasticsearch数据同步实践
  6. 各层电子数排布规则_电子排布式书写规则
  7. mysql 磁盘满_mysql磁盘满了如何恢复
  8. wxpython控件旋转_wxPython修改文本框颜色过程解析
  9. 微信授权登录功能实现
  10. UI控件和代理为什么使用weak