mysql到版本3.23.23时,开始支持全文检索,通过语句SELECT ... FROM ... MATCH(...) AGAINST(...) 来在整个表中检索是否有匹配的,全文索引是一个定义为fulltext的类型索引,应用在myisam表中。值得一提的是对于一个大的数据库来说,把数据装载到一个没有fulltext索引的表中,然后再添加索引,这样速度会非常快,但是把数据装载到一个已经有fulltext索引的表中,这样速度非常慢的。
首页要先明白mysql的全文检索原理:mysql使用的是一个非常简单的剖析器来将文本分隔成词,空格、标点等,比如‘welcom to you’将分隔为三个词‘welcom’、‘to’、‘you’,但是对中文来说,比如‘人力方网站正式上线’,这将无法分隔,因此目前mysql只支持英文的全文检索。
下面我们通过实例来一步步把全文检索的过程解释清楚:
首页我们建立表与初始化数据
CREATE TABLE IF NOT EXISTS `category` (
`id` int(10) NOT NULL auto_increment,
`fid` int(10) NOT NULL,
`catname` char(255) NOT NULL,
`addtime` char(10) NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `catname` (`catname`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
INSERT INTO `category` (`id`, `fid`, `catname`, `addtime`) VALUES
(1, 0, 'welcome to you!', '1263363380'),
(2, 0, 'hello phpjs,you are welcome', '1263363416'),
(3, 0, 'this is the fan site of you', '1263363673');