mysql全文索引详解_MySql全文索引详解

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

大家好,又见面了,我是你们的朋友全栈君。

##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(‘今日头条’)

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

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

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

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

0818b9ca8b590ca3270a3433284dd417.png 4. 匹配度高的排前面

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

0818b9ca8b590ca3270a3433284dd417.png 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)

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

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

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

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

0818b9ca8b590ca3270a3433284dd417.png 9. <>两者结合使用

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

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

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

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

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

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

0818b9ca8b590ca3270a3433284dd417.png 12. 前面有通配符

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

0818b9ca8b590ca3270a3433284dd417.png 13. 后面有通配符

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

0818b9ca8b590ca3270a3433284dd417.png

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151894.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CBAM:Convolutional Block Attention Module流程详解及Pytorch实现

    CBAM:Convolutional Block Attention Module流程详解及Pytorch实现CBAM结构详解及Pytorch实现

    2022年9月15日
  • 一维数组二分法查找_二分查找算法c语言

    一维数组二分法查找_二分查找算法c语言在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]给定 target = 5,返回

    2022年8月9日
  • pycharm 重装后双击无反应的一种解决方法

    pycharm 重装后双击无反应的一种解决方法问题描述之前安装的2018版本的pycharm,更新失败之后自动删除,所以重装了一个2020.1,然后发现双击无反应。解决方法用下面方法解决后,记录一下过程:在“添加和删除程序”中发现了pycharm2018版本的程序名,但目录文件已被删除。于是通过注册表编辑器(cmd输入regedit),在编辑→查找中查找pycharm发现了pycharm2018项,将其删除后添加或删除程序里…

    2022年8月26日
  • 差分数组(简单易懂)

    差分数组(简单易懂)一、什么是差分数组?差分数组本质上来说就是一个数组,可以用O(1)的时间处理区间修改。二、差分数组的定义式设原数组为a数组,差分数组为d数组,则对于i∈[2,n],都有d[i]=a[i]-a[i-1].三、差分数组的性质1.当我们需要更新区间[l,r]时候(仅指加减运算),我们仅仅可以只更新d[l]+=x,d[r+1]-=x;2.当我们需要单独查询原数组一个点的值的时候,我们不难发现出令Sn为di的前缀和,那么a[i]=Si;3.当我们需要求原数组的前缀和的时候,我们可以设前x项

    2022年5月20日
  • 机器学习模型评估的方法总结(回归、分类模型的评估)

    机器学习模型评估的方法总结(回归、分类模型的评估)建模的评估一般可以分为回归、分类和聚类的评估,本文主要介绍回归和分类的模型评估:一、回归模型的评估主要有以下方法:指标 描述 metrics方法 MeanAbsoluteError(MAE) 平均绝对误差 fromsklearn.metricsimportmean_absolute_error MeanSquareError(MSE) …

    2022年10月6日
  • idea2022最新激活码 csdn【中文破解版】

    (idea2022最新激活码 csdn)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlLGWSVFD4PZ-eyJsaWNlbnNlSW…

    2022年4月1日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号