2011-12-01 111 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