mysql全⽂索引详解_MySql全⽂索引详解
containskey源码##MySql全⽂索引详解
InnoDB引擎对FULLTEXT索引的⽀持是MySQL5.6新引⼊的特性,之前只有MyISAM引擎⽀持FULLTEXT索引。所谓全⽂索引,是⼀种通过建⽴倒排索引,快速匹配⽂档的⽅式。对于FULLTEXT索引的内容可以使⽤MATCH(column)…AGAINST(val)语法进⾏查询。
###MySQL⽀持三种模式的全⽂检索模式:
⾃然语⾔模式(IN NATURAL LANGUAGE MODE),即通过MATCH AGAINST 传递某个特定的字符串来进⾏检索。该模式是MySQL默认使⽤的。
布尔模式(IN BOOLEAN MODE),可以为检索的字符串增加操作符,例如“+”表⽰必须包含,“-”表⽰不包含,“*”表⽰通配符(这种情况, 即使传递的字符串较⼩或出现在停词中,也不会被过滤掉),其他还有很多特殊的布尔操作符, 具体可参考官⽅⽂档。
picfile是什么文件查询扩展模式 (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)..)thread用英语怎么说
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. < :降低相关性,查询的结果会排在⽐较靠后的位置codeblocks使用教程c++语言
SELECT title from t_full_text WHERE MATCH(title) AGAINST('+今⽇头条
mysql面试题索引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)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论