2017-10-17 39 views
2

我希望有人能查询我有一个关于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单独检查每个单词而不是查看完整的字符串,并且停用词和最小词长度是否不返回任何结果的原因?我会说得对吗?如果是这样,是否有可能让MySQL将它看作一个字符串?

+0

给你的表的详细信息。 –

+0

如果您想查看'SearchCompany'是否等于' All Bar One'',您为什么需要MATCH? –

+0

Plesa首先阅读https://dev.mysql.com/doc/refman/5.5/en/ fulltext-boolean.html –

回答

1

默认情况下,MySQL全文索引的索引不会索引字少于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) 
1

你需要指定服务商...如果你想需要整个短语,它需要加引号:

SELECT * FROM table WHERE MATCH(SearchCompany) AGAINST ('+"All Bar One"' IN BOOLEAN MODE); 
+0

你好,基于我的修改后的问题我试过了如下:SELECT * FROM tbladvertstest WHERE MATCH('SearchCompany')AGAINST('+“All Bar One”'BOOLEAN MODE);但是没有运气? – user3922793