data 字段定义了全文搜索索引
Storage Engine 也设置成了MyISAMmysql>SELECT id FROM reviews WHERE MATCH (data) AGAINST ('single') ;MySQL 返回的查询结果为空(即零行)。 (查询花费 0.0003 秒) //为什么没有结果返回,还要设置什么东西吗下面是数据mysql> SELECT * FROM reviews;+----+--------------------------------------------+| id | data                                       |+----+--------------------------------------------+|  1 | Gingerboy has a new single out called ...  ||  2 | Hello all, I really like the new Madon ... ||  3 | Have you heard the new band Hotter Than... |+----+--------------------------------------------+3 rows in set (0.00 sec)

解决方案 »

  1.   

    sql 没错,可能是因为fulltext的他本身的限定,排查下:
    如:
    排除不完整单词排除长度少于4个字符(3个或者更少)的词 (ft_min_word_len/ft_max_word_len)排除在一半以上的行中都出现的词(这意味着至少要有3行)再多加几条数据试下.
      

  2.   

    lz  最好是把你的create table 语句 贴出来 ,方便解决问题, thanks
      

  3.   


    创建表格
    CREATE TABLE reviews (id INT(5) 
    PRIMARY KEY NOT NULL AUTO_INCREMENT, data TEXT);
    添加数据: mysql> INSERT INTO `reviews` (`id`, `data`) VALUES(1, 'Gingerboy has a new single out called Throwing Rocks. It's great!');mysql> INSERT INTO `reviews` (`id`, `data`) VALUES (2, 'Hello all, I really like the new Madonna single. One of the hottest tracks currently playing...I've been listening to it all day');mysql> INSERT INTO `reviews` (`id`, `data`)VALUES (3, 'Have you heard the new band Hotter Than Hell?They have five members and they burn their instruments when they play in concerts. These guys totally rock! Like, awesome, dude!');
    定义data索引
    mysql> ALTER TABLE reviews ADD FULLTEXT INDEX (data);检查索引
    mysql> SHOW INDEXES FROM reviews;
     Table   | Column_name   | Packed | Null | Index_type | Comment |----------+---------------+--------+------+------------+---------+| reviews |  id           | NULL   |      | BTREE      |         || reviews |  data         | NULL   | YES  | FULLTEXT   |         |+---------+---------------+--------+------+------------+---------+2 rows in set (0.01 sec)查找
    mysql> SELECT id FROM reviews WHERE MATCH (data) AGAINST ('single');
    0 rows in set (0.00 sec)
      

  4.   

    就是:全文索引他不能找出出现50%以上的数据的.single 这个词 在你的表中出现了50%以上,id=1,2的数据中都出现了single.
    你用
    SELECT id FROM reviews WHERE MATCH (data) AGAINST ('Gingerboy');就可以得到数据,因为'Gingerboy' 在你的表中出现了1次,低于50%.这个就是FULLTEXT的不足
      

  5.   

    楼主你看下这个语句的效果:
    SELECT *,MATCH (data) AGAINST ('Gingerboy') as mtch FROM reviews按照这个排序则可以
    SELECT *,MATCH (data) AGAINST ('Gingerboy') as mtch FROM reviews
    having mtch > '数值'
    order by math desc/asc 
    ...