我希望有人可以提供有关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将其视为一个字符串?
答案 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)