MySQL(Windows10)FULLTEXT搜索MyISAM表不起作用

时间:2018-01-24 04:57:52

标签: mysql mariadb

我有一个问题,我可以使用两个非常简单的表重新创建。表格定义如下:

create table Temp_Table_MyISAM(  
  id  INT UNSIGNED AUTO_INCREMENT,  
  code VARCHAR(10) NOT NULL,  
  name VARCHAR(256) NOT NULL,    
  PRIMARY KEY (id),  
  KEY (code),  
  FULLTEXT (name)  
) ENGINE = MYISAM;  


create table Temp_Table_InnoDB(  
  id  INT UNSIGNED AUTO_INCREMENT,  
  code VARCHAR(10) NOT NULL,  
  name VARCHAR(256) NOT NULL,  
  PRIMARY KEY (id),  
  KEY (code),  
  FULLTEXT (name)  
);  

每个表都有两行,从以下两个查询的结果可以看出:

从Temp_Table_MyISAM中选择*;

 +----+---------+----------------+  
 | id | code    | name           |  
 +----+---------+----------------+  
 |  1 | AC-7865 | 38 NORTHRIDGE  |  
 |  2 | DE-3514 | POLARIS VENTRI |  
 +----+---------+----------------+  

从Temp_Table_InnoDB中选择*;

 +----+---------+----------------+  
 | id | code    | name           |  
 +----+---------+----------------+  
 |  1 | AC-7865 | 38 NORTHRIDGE  |  
 |  2 | DE-3514 | POLARIS VENTRI |  
 +----+---------+----------------+  

当我在MyISAM表上进行FULLTEXT搜索时,我没有得到任何点击

  

MariaDB [stackoverflow]> SELECT名称,代码FROM Temp_Table_MyISAM   在哪里比赛(姓名)反对('38');
  空集(0.00秒)

     

MariaDB [stackoverflow]> SELECT名称,代码FROM Temp_Table_MyISAM   在哪里比赛(名字)反对('POLARIS');
  空集(0.00秒)

当我在InnoDB表上进行FULLTEXT搜索时,只有当要匹配的模式不是以数值开头时才能获得命中

  

MariaDB [stackoverflow]> SELECT名称,代码FROM Temp_Table_InnoDB   在哪里比赛(姓名)反对('38');
  空集(0.00秒)

     

MariaDB [stackoverflow]> SELECT名称,代码FROM Temp_Table_InnoDB   在哪里比赛(名字)反对('POLARIS');

+----------------+---------+  
| name           | code    |  
+----------------+---------+  
| POLARIS VENTRI | DE-3514 |  
+----------------+---------+  

任何见解都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

在MyISAM FULLTEXT中需要注意3条规则:

  • 短于ft_min_word_len的文字(默认4个字符)将不会被编入索引。 (" 38&#34)

  • 搜索显示在50%或更多行中的单词将被忽略。 ("北极星&#34)

  • "停止言语"在文本中没有索引。 ("","和",...)

由于InnoDB现在支持FULLTEXT,您应该转移到该引擎。 (那里的规则不同。)