2015-10-29 101 views
0

當我的搜索在我的全文搜索中包含單詞「the」時,我遇到問題。MySQL 5.6全文搜索當在PHP中搜索單詞「the」時出現問題

這裏是一個問題我的搜索代碼:

SELECT * FROM names WHERE MATCH(myname) AGAINST ('+the' IN BOOLEAN MODE) 

這一個正常工作:

SELECT * FROM names WHERE MATCH(myname) AGAINST ('+and' IN BOOLEAN MODE) 

我已經關閉停止詞在我的CNF文件,改變了最小字母3同時使用ft_min_word_len=3innodb_ft_min_token_size=3

我正在使用innodb。並且返回27000個結果,'the'從大約500,000條記錄的db返回17000,所以我沒有達到50%的記錄,即使如此,我使用布爾模式。我找不到另一個打破這個詞的詞。有任何想法嗎?

回答

0

建立一個不同的停用詞表。從中刪除「the」和「and」。

+0

感謝您的回覆。我已經在my.cnf中有ft_stopword_file =「」並重新啓動服務器。我已經安裝好幾個月了,並已確認它已正確設置。正如我在我的文章中所說的,'and'這個詞有效,我只是對'the'這個詞感到困惑...... – DanMan

0

好吧,我終於明白了這一點。它看起來像我已經myisam停用詞清除,但不是innodb的。這是一個小,但難度比對於MyISAM做的,但這裏有其他人的步驟,可能需要它:

在你的/etc/my.cnf(或my.ini文件在Windows上)加上這些行:

創建一個停用詞表。我在一個名爲settings的db和一個名爲innodb-stopwords的表中創建了我的表。你不能只設置innodb_ft_enable_stopword = 0,你必須創建並鏈接到一個表。

確保您的表是innodb並添加名爲value,varchar(?),utf8_general_ci的列。您可以將其保留爲空或向表中添加值。

innodb_ft_enable_stopword = 1 
innodb_ft_server_stopword_table = settings/innodb-stopwords 

重新啓動你的mysql服務器。

刪除並重新創建全文索引。

如果你不想重新啓動服務器,可以動態設定(也更新CNF/ini文件的下一個服務器重啓)

--innodb_ft_enable_stopword=1 
--innodb_ft_server_stopword_table=db_name/table_name 

我看不到任何解決辦法變量重新創建索引...您可以在一個命令中完成,但表格始終處於鎖定狀態,您的用戶不會收到錯誤:

ALTER TABLE `tablename` DROP INDEX indexname, ADD FULLTEXT(`columnname`);