最近在做mysql优化,涉及到match函数的使用,特意整理一下。
使用MATCH的使用介绍:
1.语法糖:
MATCH(title) against('KEY' IN BOOLEAN MODE)
MATCH(title,body) against('KEY' IN BOOLEAN MODE)
2.使用注意:
MySql默认支持全文检索的字符长度是4
可以用SHOW VARIABLES LIKE 'ft_min_word_len' 来查看指定的字符长度
也可以在mysql配置文件my.ini 更改最小字符长度,在my.ini 增加一行
比如:ft_min_word_len = 2,改完后重启mysql即可。
否则,如果词是较少的,它将得到一个较高的权重,mysql默认的阀值是50%,上面‘you’在每个文档都出现,因此是100%,只有低于50%的才会出现在结果集中。
3.检索表达式及语法
一。MATCH(title) against('+zhang -lishi ~wangwu zhaoliu*' IN BOOLEAN MODE) +表示and,-表示not,~表示异或运算符,*表示所有,空格表示or 等等

4.特殊符号处理
当全文检索碰到特殊符号的时候,会触发函数自动对检索条件进行分词搜索。注意:一些特殊符号属于函数的保留符号,函数会把符号解析成条件进行分词
例如:欣欣贸易(北京)有限公司 会自动拆分成 欣欣贸易,北京,有限公司去做搜索,返回包含欣欣贸易或者北京或者有限公司的记录。
这里注意下:mysql默认检索长度是4,这些条件中北京是两个字符,不会触发检索
也就是说最后检索的结果是只包含 欣欣贸易和有限公司 这两个条件的数据
例如:MATCH(title) against('“欣欣贸易(北京)有限公司” “大华贸易(北京)股份有限公司”' IN BOOLEAN MODE)
上面所述希望能对大家有帮助!
虽然上面这些能解决一部分问题,但是还是一些遗留新得问题产生:
虽然加上双引号能够使用,但是其实还是触发了分词,比如 欣欣贸易(北京)有限公司
它还是被分成 欣欣贸易(北京)和有限公司
如果你mysql默认检索字符长度没有改变 还是4,那么遇到 贸易(北京)有限公司 这样得查询条件还是丢失了精准度。
如果有那么大佬知道原因,还望告知一二