top
Loading...
12.7.5.微調MySQL全文搜索
12.7.5. 微調MySQL全文搜索

MySQL的全文搜索容量幾乎不具有用戶調節參數。假如你擁有一個 MySQL源分布,你就能對全文搜索性能行使更多控制,原因是一些變化需要源代碼修改。請參見2.8節,“使用源碼分發版安裝MySQL”

注意,為了更加有效,需要對全文搜索謹慎調節。實際上,在大多數情況下修改默認性能只能降低其性能。 除非你知道自己在做什么,否則不要改變 MySQL源。 

下述的大多數全文變量必須在服務器啟動時被設置。為了改變它們,還要重新啟動服務器;在服務器正在運行期間,他們不會被改變。 

一些變量的改變需要你重建表中的 FULLTEXT 索引。本章結尾部分給出了其有關操作說明。

  • ft_min_word_len and ft_max_word_len系統自變量規定了被編入索引單詞的最小長度和最大長度。(5.3.3節,“服務器系統變量”.) 默認的最小值為四個字符;默認的最大值取決于使用的 MySQL 版本。假如你改變任意一個值,那么你必須重建你的 FULLTEXT索引。 例如,若你希望一個3字符的單詞變為可查找項,則可以通過將以下行移動到一個供選擇文件里,從而設置 ft_min_word_len 變量:

·                [mysqld]

·                ft_min_word_len=3

然后重新啟動服務器,重建你的 FULLTEXT索引。同時還要特別注意該表后面的說明中的關于myisamchk的注釋。

  • 若要覆蓋默認停止字,則可設置 ft_stopword_file 系統變量。 (5.3.3節,“服務器系統變量”變量值應為包含停止字的文件路徑名, 或是用來截止禁用詞過濾的空字符串。在改變了這個變量的值或禁用詞文件的內容后, 重建你的 FULLTEXT索引。

停止字是自由形態的,換言之,你可使用任何諸如newline spacecomma這樣的非字母數字字符來分隔禁用詞。 下劃線字符(_) 和被視為單詞的一部分的單引號 (')例外。停止字字符集為服務器默認字符集;見10.3.1節,“服務器字符集和校對”.

  •  自然語言查詢的50%閾值由所選擇的特別權衡方案所決定。若要阻止它,myisam/ftdefs.h 中尋找以下行:

·                #define GWS_IN_USE GWS_PROB

將該行改為:

#define GWS_IN_USE GWS_FREQ

然后重新編譯 MySQL。此時不需要重建索引。注釋這樣做你會嚴重的By 降低 MySQLMATCH()函數提供合適的相關值得能力。假如你爭得需要搜索這樣的普通詞,而使用IN BOOLEAN MODE代替的效果更好,因為它不遵循 50% 閾值。

  • 要改變用于布爾全文搜索的操作符,設置 ft_boolean_syntax 系統變量。 這個變量也可以在服務器運行時被改變,但你必須有SUPER 特權才能這么做。在這種情況下不需要重建索引。 見5.3.3節,“服務器系統變量”, 它向我們說明了怎樣使用這個變量的規則。

假如你改變了影響索引的全文變量 (ft_min_word_len ft_max_word_lenft_stopword_file),或假如你改變了禁用詞文件本身,則你必須在改變和重新啟動服務器后重建你的 FULLTEXT索引。這時,要重建索引, 只需進行一個 QUICK 修理操作: 

mysql> REPAIR TABLE tbl_name QUICK;

注意,假如你使用  myisamchk 來執行一項修改表索引的操作 (諸如修理或分析 ), 則使用最小單詞長度和最大單詞長度以及停止字的默認全文參數值重建FULLTEXT索引,除非你已另外指定。這會導致問詢失敗。

發生這個問題的原因是只有服務器認識這些參數。它們的存儲位置不在  MyISAM 索引文件中。若你已經修改了最小單詞長度或最大單詞長度或服務器中的停止字,為避免這個問題,為你對mysqld所使用的myisamchk 指定同樣的 ft_min_word_len ft_max_word_lenft_stopword_file值。例如,假如你已經將最小單詞長度設置為 3, 則你可以這樣修改一個帶有myisamchk的表:

shell> myisamchk --recover --ft_min_word_len=3 tbl_name.MYI

為保證 myisamchk 及服務器對全文參數使用相同的值, 可將每一項都放在供選文件中的 [mysqld] [myisamchk] 部分:

[mysqld]

ft_min_word_len=3

 

[myisamchk]

ft_min_word_len=3

使用 REPAIR TABLE ANALYZE TABLEOPTIMIZE TABLEALTER TABLE來代替使用 myisamchk 。這些語句通過服務器來執行,服務器知道使用哪個全文參數值更加合適。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/functions.html
北斗有巢氏 有巢氏北斗