我有一个问题,可以通过两个非常简单的表来重新创建。这些表的定义如下:
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表上进行全文本搜索时,我没有得到任何点击
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 |
+----------------+---------+
任何见识将不胜感激。
最佳答案
MyISAM的FULLTEXT
中有3条规则需要注意:
少于ft_min_word_len
(默认4个字符)的文本单词将不被索引。 (“ 38”)
在超过50%或更多行中显示的搜索词将被忽略。 (“北极星”)
文本中的“停止词”未编制索引。 (“ the”,“ and”,...)
由于InnoDB现在支持FULLTEXT
,因此您应该转到该引擎。 (那里的规则是不同的。)
关于mysql - 使用MyISAM表的MySQL(Windows10)FULLTEXT搜索不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48415088/