【问题标题】:MySQL (Windows10) FULLTEXT searching with MyISAM tables not workingMySQL(Windows10)使用 MyISAM 表进行 FULLTEXT 搜索不起作用
【发布时间】:2018-07-03 01:29:17
【问题描述】:

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

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]> 选择名称,代码 FROM Temp_Table_MyISAM WHERE MATCH(name) 反对('38');
空集(0.00 秒)

MariaDB [stackoverflow]> 选择名称,代码 FROM Temp_Table_MyISAM WHERE MATCH(name) AGAINST('POLARIS');
空集(0.00 秒)

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

MariaDB [stackoverflow]> 选择名称,代码 FROM Temp_Table_InnoDB WHERE MATCH(name) 反对('38');
空集(0.00 秒)

MariaDB [stackoverflow]> 选择名称,代码 FROM Temp_Table_InnoDB WHERE MATCH(name) AGAINST('POLARIS');

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

任何见解将不胜感激。

【问题讨论】:

  • 我建议阅读fulltext manual。最后一段涵盖了您的第一个问题,也方便地提取了here(以及更多类似的问题)。第二个问题在该手册的上面 14 行被覆盖(“38”这个词太短而不能包含在索引中),例如解释in this question(还有更多)。但同样,你真的应该阅读手册,因为还有更多的事情需要考虑(例如停用词列表)。

标签: mysql mariadb


【解决方案1】:

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

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

  • 出现在 50% 或更多行中的搜索词将被忽略。 (“北极星”)

  • 文本中的“停用词”未编入索引。 ("the", "and", ...)

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

【讨论】:

    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多