MySQL使用FULLTEXT时,有的单词检索不出来?类似介词(to、of等)的直接忽略?求大神给解释下。谢谢^_^
表结构&数据:
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 xp 你好', '1263363673');
执行查询一(返回空集):
SELECT * FROM category where match(catname) against('of');
执行查询一(返回一行记录):
SELECT * FROM my_project.category where match(catname) against('xp');
备注:
最小分词长度已经修改为1。
ft_stopword_file (built-in) 你的词都已经默认的过滤了,所以没结果.
FULLTEXT KEY catname
(catname
) WITH PARSER ngram
创建索引时加上 WITH PARSER ngram 就可以了
1楼回答是正确的,使用 SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD; 可以查看被过滤的单词,补充一点:如果搜索的 字符或数字 小于4位,设置了ft_min_word_len=1 还是搜不到,这个时候就要看你的表存储引擎是不是 InnoDB,InnoDB需要设置 innodb_ft_min_token_size=1,这时候发现 单个数字 也能搜到了!