基于mysql全文索引的深入理解
前言:本文简单讲述全文索引的应用实例,MYSQL演示版本5.5.24。 如图点击结尾处的{全文搜索}即可设置全文索引,不同MYSQL版本名字可能不同。 二、设置条件 1.表的存储引擎是MyISAM,默认存储引擎InnoDB不支持全文索引(新版本MYSQL5.6的InnoDB支持全文索引) 2.字段类型:char、varchar和text 三、配置 my.ini配置文件中添加 # MySQL全文索引查询关键词最小长度限制 [mysqld] ft_min_word_len = 1 保存后重启MYSQL,执行SQL语句 复制代码 代码如下: SHOW VARIABLES 查看ft_min_word_len是否设置成功,如果没设置成功请确保 1.确认my.ini正确配置,注意不要搞错my.ini的位置 2.确认mysql已经重启,实在不行重启电脑 其他相关配置请自行百度。 注:重新设置配置后,已经设置的索引需要重新设置生成索引 四、SQL语法 首先生成temp表 CREATE TABLE IF NOT EXISTS `temp` ( `id` int(11) NOT NULL AUTO_INCREMENT,`char` char(50) NOT NULL,`varchar` varchar(50) NOT NULL,`text` text NOT NULL,PRIMARY KEY (`id`),FULLTEXT KEY `char` (`char`),FULLTEXT KEY `varchar` (`varchar`),FULLTEXT KEY `text` (`text`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; INSERT INTO `temp` (`id`,`char`,`varchar`,`text`) VALUES (1,'a bc 我 知道 1 23','a bc 我 知道 1 23'); 搜索`char`字段 'a' 值 SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('a') 但是你会发现查询无结果?! SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('a' IN BOOLEAN MODE) 这样就可以查询出结果了,但是我们不推荐使用。 INSERT INTO `temp` ( `id`,`text` ) VALUES ( NULL,'7','7' ),( NULL,'a,bc,我,知道,1,23',23' ),'x','x' ); 这时你执行以下SQL语句都可以查询到数据 SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('a'); SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('bc'); SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('我'); SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('知道'); SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('1'); SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('23'); 以下SQL搜索不到数据 SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('b'); SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('c'); SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('知'); SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('道'); SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('2'); SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('3'); 如果搜索多个词,请用空格或者逗号隔开 SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('a x'); SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('a,x'); 上面的SQL都可以查询到三条数据 $str="测试中文分词"; $so = scws_new(); $so->send_text($str); $temp=$so->get_result(); $so->close(); var_dump($temp); 如果安装未成功,请参照官方说明文档 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |