2014-09-21 32 views
0

我有一个产品表不能正常工作,它包含这些数据:mysql的全文检索精确匹配预期

  name   | 
------------------------- 
Nokia X 4GB Nokia X 3G | 
Nokia X 4GB 3G   | 
Nokia XL 4GB Nokia X 3G | 
Nokia XL 4GB Nokia X 3G | 
Nokia Asha 512   | 
Nokia Lumia 925   | 
Nokia Asha 306 2GB  | 
.... 

,然后当我运行此查询:

SELECT name, 
MATCH(name) AGAINST('+Nokia +X +4GB +3G' IN BOOLEAN MODE) AS rank 
FROM products as p 
ORDER BY rank DESC limit 4; 

它应该返回前四名的结果,但我看到它返回

Nokia Asha 309 A00008390 
Nokia Asha 306 2GB 

任何人都知道为什么?

回答

0

MySQL全文索引的默认字长为4个字符。您应该尝试将其更改为1个字符。要做到这一点,添加以下设置将my.ini文件中[mysqld]部分:

ft_min_word_len=1 

然后重新启动MySQL服务器,然后删除然后重新创建全文索引重建。

+0

看起来像'REPAIR TABLE products QUICK'会比删除并重新创建索引好,对吗? – 2014-09-21 08:38:40

+0

是的,我相信这也能完成这项工作。 – Peter 2014-09-21 08:52:13