2014-12-05 189 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

相關問題