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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Lucene中AttributeSource作为TokenStream父类的原因

    Lucene中AttributeSource作为TokenStream父类的原因lucene3.0lucene中有如下的类层次:org.apache.lucene.util.AttributeSourceorg.apache.lucene.analysis.TokenStream(implementsjava.io.Closeable)org.apache.lucene.analysis.NumericTokenStreamorg.apache…

    2022年7月22日
    8
  • Java线程和进程区别

    Java线程和进程区别什么是进程,什么是线程?进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。一个程序至少一个进程,一个进程至少一个线程。进程线程的区别1、地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。2、…

    2022年7月15日
    10
  • JS字符串分割截取

    JS字符串分割截取1.函数:split()功能:把一个字符串按指定的分隔符分割存储到数组中。例子:str=”2018.12″;arr=str.split(“.”);//arr是一个包含”2018″和”12″的数组,arr[0]是2018,arr[1]是12。2.函数:join()功能:使用分隔符将一个数组合并为一个字符串。例子:varString=myArray.joi…

    2022年4月27日
    30
  • Android程序员接私活完整攻略「建议收藏」

    Android程序员接私活完整攻略「建议收藏」接私活对程序员这个圈子来说是一个既公开又隐私的话题,不说全部,应该大多数程序员都有过想要接私活的想法,当然,也有部分得道成仙的不主张接私活。但是很少有人在公开场合讨论私活的问题,似乎都在避嫌。就跟有人下班后跑滴滴一样,程序员私有时间接点活挣点钱不也很正常么,不过不要在上班时间就行,就跟你上班期间出去跑滴滴一样。当你竭尽全力想要去接私活的时候一定做过这样的事,百度搜索“程序员如何接私活”或者…

    2022年6月14日
    156
  • Linux初窥:Linux下SSH免密码登录配置[通俗易懂]

    Linux初窥:Linux下SSH免密码登录配置[通俗易懂]目录环境设置(root权限)1.关闭防火墙和SELinux2.设置主机名3.配置hosts4.配置sshd秘钥设置1.创建免密码登录账户2.生成秘钥3.将公钥导入到认证文件4.设置文件访问权限5.将认证文件复制到其他主机假设有A、B两台Linux服务器,我们希望能够从其中一台服务器通过SSH免密码登录到另一台服务器。两台服务器的信息如…

    2022年10月23日
    0
  • java excel 取消科学计数法_基于Java将Excel科学计数法解析成数字

    java excel 取消科学计数法_基于Java将Excel科学计数法解析成数字需要注意的是一般的科学表达式是 1 8E121 8E 12 而在 Excel 中的科学表达式是 1 8E 121 8E 12 我写的科学计数法的正则表达式是 d d Ee 1 0 9 导入 EXCEL 数据时将科学计数法解析成数字 Java 代码 importjava text DecimalForma importjava util regex Pattern pub

    2025年6月3日
    0

发表回复

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

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