2014-12-05 101 views
0

我有pers表和申请结合全文索引(prenom,nom)字段。以下是该表中的数据。现在全文搜索无法正常工作

persID prenom  nom (pers table) 
-------------------------------- 
116 te   te 
117 te test  test te 

,我试图获取上述使用MATCH反对记录。以下是我的查询。

​​

现在我试着用mysql LIKE(%..%)操作。以下是我试过的查询。

SELECT `Pers`.`persID` 
FROM `bdrplus`.`pers` AS `Pers` 
LEFT JOIN `bdrplus`.`pers_detail` AS `PersDetail` 
    ON (`PersDetail`.`persID` = `Pers`.`persID`) 
WHERE `Pers`.`etat` =1 
AND `Pers`.`persID` !=55 
AND (Pers.prenom LIKE 'te%' OR Pers.nom LIKE 'te%') 

Result 
----------------------- 
persID prenom  nom (pers table) 
116 te   te 
117 te test  test te 

我不明白为什么我没有得到使用同时匹配记录针对全文索引查询操作?

回答

0

全文搜索的设置很少,其中一个是ft_min_word_len,默认情况下它的设置为4,除非将其更改为较小的数字,否则将不会考虑小于4个字符的单词。

在你的情况下,其返回正确的结果,因为你有

MATCH(Pers.prenom, Pers.nom) AGAINST('te*' IN BOOLEAN MODE)

及其配套te testtest te

您可以使用下面的命令

show variables like 'ft_%';

检查ft_mn_word_len

如果你需要将其设置为小于默认值并允许考虑2的字长时,您需要更改该值。

在于Debian/Ubuntu OS您可以通过更新my.cnf文件的文件的位置通常是在

/etc/mysql

改变ft_min_word_len价值,所以还是上面的文件夹和类型

sudo vi my.cnf

然后在文件中检查块[mysqld],看看变量是否已经存在,如果不是那么ju ST添加行

ft_min_word_len = 2

保存它,并重新启动mysql的

sudo /etc/init.d/mysql restart

sudo service mysql restart

如果你已经有了一个表上全文索引之前,完成上述操作后,经过上述变更,删除索引并重新登录建或者你可以从MySQL的终端东西做修复表作为

repair table table_name quick

+0

您好,我尝试了上述解决办法,但仍无法正常工作 – Jimit 2014-12-05 11:45:59

+0

什么是你早'ft_min_word_len',你更改后重启MySQL?更改后,您需要删除索引并重新创建索引。或者需要修复表格。另请注意,mysql全文搜索已停止单词列表http://dev.mysql.com/doc/refman/5.1/en/fulltext-stopwords.html – 2014-12-05 11:49:03

+0

我使用的是Windows,所以我在my.ini中检查过。 ft_min_word_len在那里不可用。我添加它,并将其分配给2,然后重新启动mysql并重新索引全文索引 – Jimit 2014-12-05 11:54:29