Mysql停止单词和匹配

时间:2017-10-17 10:53:26

标签: mysql

我希望有人可以提供有关MYSQL停用词和匹配

的查询

如果我要运行下面的mysql查询:

CREATE TABLE `tbladvertstest` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`SearchCompany` varchar(250) DEFAULT NULL,PRIMARY KEY (`id`),FULLTEXT KEY `SearchCompany` (`SearchCompany`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;


INSERT INTO `tbladvertstest` (`id`, `SearchCompany`) VALUES (NULL, 'All Bar One');


SELECT * FROM `tbladvertstest` WHERE MATCH (`SearchCompany`) AGAINST ('"All Bar One"' IN BOOLEAN MODE) 

我认为查询将返回“SearchCompany”为“All Bar One”的所有结果,但返回的行数为零。我假设Mysql是单独检查每个单词而不是查看完整的字符串而停用词和minium字长是不返回任何结果的原因?我会是对的吗?如果是这样可以让MySQL将其视为一个字符串?

2 个答案:

答案 0 :(得分:1)

您需要指定运算符...如果您想要整个短语,则需要使用引号:

noexcept(false)

答案 1 :(得分:1)

默认情况下,MySQL FULLTEXT索引不会索引长度小于4个字符的单词(对于MyISAM表)。如果要索引3个字母的单词,则需要将ft_min_word_len系统变量(或InnoDB的innodb_ft_min_token_size)设置为3或更低的值,然后重新启动mysqld并重建表。

例如,将其添加到my.cnf文件的[mysqld]部分:

ft_min_word_len=3

然后重启mysqld。

然后运行此命令以重建表:

alter table `tbladvertstest` force;

现在您的查询应该有效:

mysql > SELECT * 
    -> FROM `tbladvertstest` 
    -> WHERE MATCH (`SearchCompany`) AGAINST ('+"All Bar One"' IN BOOLEAN MODE) ;
+----+---------------+
| id | SearchCompany |
+----+---------------+
|  1 | All Bar One   |
+----+---------------+
1 row in set (0.00 sec)