2017-10-17 52 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