2011-12-01 90 views
4

(mysql 5.1.36)Mysql全文搜索無法找到一個單詞 - 爲什麼?

我想知道爲什麼當我在全文查詢中搜索單詞'three'時,我沒有得到任何結果。如果單詞「three」是字段中唯一的文本,或者它是句子的一部分,我會得到相同的結果。

這是很容易重現:

CREATE TABLE `test`(`id` INT UNSIGNED NOT NULL AUTO_INCREMENT , `word` TEXT NOT NULL , PRIMARY KEY (`id`)); 
ALTER TABLE `test` ADD FULLTEXT `NewIndex1` (`word`); 
INSERT INTO `test`(`id`,`word`) VALUES (NULL,'three'); 
INSERT INTO `test`(`id`,`word`) VALUES (NULL,'thorn'); 

然後運行這些查詢:

SELECT * FROM test WHERE word='three'; 

結果= [1, '三']

SELECT word FROM test WHERE MATCH(word) AGAINST ('three*' IN BOOLEAN MODE); 

結果= []

SELECT word FROM test WHERE MATCH(word) AGAINST ('three' IN BOOLEAN MODE); 

結果= []

SELECT word FROM test WHERE MATCH(word) AGAINST ('thre*' IN BOOLEAN MODE); 

結果= []

SELECT word FROM test WHERE MATCH(word) AGAINST ('thorn*' IN BOOLEAN MODE) 

結果= [2, '刺']

SELECT word FROM test WHERE MATCH(word) AGAINST ('thorn' IN BOOLEAN MODE) 

結果= [2, '刺']

SELECT word FROM test WHERE MATCH(word) AGAINST ('thor*' IN BOOLEAN MODE) 

resul t = [2,'thorn']

爲什麼全文搜索'three'沒有返回結果?

回答

7

由於三是一個停用詞,全文將忽略該詞並且不返回與單詞'三'有關的結果。基本上,停止詞是目前提高性能,並不返回包含單詞,如'是,是,那裏,是...'的每一行。這是停用詞的list,請檢查它們。

+0

謝謝 - 我忘了所有關於停用詞。 – John

2

要添加到上面的回答:如果你想添加的禁用詞的全文索引,只需添加到您的.CNF文件,重新啓動MySQL的引擎和重建索引:如果你的避風港 ft_stopword_file = ""我除此之外,已經將分鐘字降低到3(ft_min_word_len=3)以便能夠搜索3個字母的單詞。

+0

良好的建議 - 我會更多地研究它。 – John

+0

@John如果你改變了ft_min_word_len,全文的表現很可能會下降很多。請注意這一點。 –

+0

是@SavasVedova是對的.. – ThinkingMonkey