因为这个表有 10万的文章数据,如果用like 查询十分缓慢,现状想到用 fulltext 但是发现找不到数据。CREATE TABLE `zb_article` (
  `aid` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `content_text` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '纯文本,无HTML源码',
  PRIMARY KEY (`aid`),
  FULLTEXT KEY `title` (`title`,`content_text`)
) ENGINE=InnoDB AUTO_INCREMENT=7578 DEFAULT CHARSET=utf8;
insert into zb_article values(NULL,'前广场工程PPP项目','(高铁站)(ppp)合同.pdf');# 有结果
select * from zb_article where match(title,content_text) against('高铁站');
select * from zb_article where match(title,content_text) against('PPP'); 
# 以下为空
select * from zb_article where match(title,content_text) against('合同');
select * from zb_article where match(title,content_text) against('广场'); 
select * from zb_article where match(title,content_text) against('项目');

解决方案 »

  1.   

    mysql 现在不支持中文分词。猜测字符串'(高铁站)(ppp)合同.pdf'会根据'('和')'分词,所以你的前两条查询可以得到结果。
      

  2.   

    MYSQL 全文索引是实现不了like  的效果。
    全文索引只能按单词来查询。 比如  今天是星期天。
    想检查 星期天 是查不出结果的, 只有 “ 今天是 星期天”,
    中间有空格或其它类的间隔开,星期天被认为是一个单词,才会被查询出来
      

  3.   

    CREATE TABLE `zb_article` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `title` varchar(200) DEFAULT NULL,
      `body` text,
      PRIMARY KEY (`id`),
      FULLTEXT KEY `title` (`title`,`body`) /*!50100 WITH PARSER `ngram` */ 
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;你上面查询到结果,你看下你的相关度,是0,要用ngram支持中文才可以