mysql全文索引模糊查询

正文开始

[md] linux服务器为my.cnf,在 [mysqld] 后面加入一行“ft_min_word_len=1”,然后重启Mysql。

  SELECT * FROM `student` WHERE MATCH(`name`) AGAINST('聪');
  SELECT * FROM t3 WHERE name2 REGEXP "不会吧";
  SELECT * FROM t3 WHERE name2 REGEXP "^不会吧";
  SELECT * FROM t3 WHERE name2 REGEXP "不会吧$";

相关性   如果一个查询,匹配到多条记录,是怎么返回呢?根据相关性

-- 查询相关性 SELECT title, MATCH(title) AGAINST('like') AS relevance FROM test

发现只有前面2条记录的相关性>0,推断查询结果就是取相关性>0的记录,其实也正是如此。那相关性是怎么计算呢

  (1) word(查询关键字)是否在文档中出现   (2) word在文档中出现的次数   (3) word在索引列中的数量   (4) 多少个文档包含该word 所以Some like it hot, Some like it cold,出现了2次like,相关性高

Some like it in who pot出现了1次,相关性低

而其它记录没有相关性

检索模式  Natural Language   上面的例子我们是用的默认的检索模式,Natural Language模式!表示查询带有指定word的文档。下面2种方式是等价的

SELECT * FROM test WHERE MATCH(title) AGAINST('what' in NATURAL LANGUAGE MODE); SELECT * FROM test WHERE MATCH(title) AGAINST('what');

 Boolean 当使用这种模式时,表示字符串前后的字符有特殊含义。比如要查找有Pease单词的记录

SELECT * FROM test WHERE MATCH(title) AGAINST('+Pease' in BOOLEAN MODE);

假设,我们需要查找有Pease,但是没有hot的记录呢?用+,-符号,分别表示一定存在,或者一定不存在

SELECT * FROM test WHERE MATCH(title) AGAINST('+Pease -hot' in BOOLEAN MODE);

正文结束

Mysql Innodb 引擎优化 参数 ubuntu安装 mysql_pdo