1. 程式人生 > >MySQL全文檢索外掛

MySQL全文檢索外掛

hightman實現了一個MySQL全文檢索的外掛。它只能使用在5.1.11-12,並且需要更改MySQL的原始碼,故對其做了一些修改,替換了一個MySQL後續版本中更改了的介面,去掉了一些不需要的功能。

hightman的外掛使用了自己的wordlist和stopword list,並使用正向最大匹配分詞,新的外掛對演算法沒有任何改變。外掛只支援utf8,就是說用於建索引的欄位的字符集必須為utf8。wordlist 中只有26萬的詞彙,可能分詞不是很準確,因為我不太清楚好的分詞是什麼樣子,所以也說不準。支援normal mode和boolean mode,不支援query expansion。分詞的速度大概為65M的文字建索引需要85秒(沒比較,不知道是快還是慢)。原始碼見最後的連結。

使用方法:

1. 編譯外掛,MySQL必須是5.1.12版之後的版本,編譯出來的so檔案必須放在MySQL安裝目錄的lib/plugin目錄下

shell> gcc -DMYSQL_DYNAMIC_PLUGIN -Wall -shared \
-I/usr/local/mysql/include \
-I/usr/local/mysql-source/include \
-I/usr/local/mysql-source \
-o /usr/local/mysql/lib/plugin/libthunder_ft.so \
thunder_ft.c

2. 拷貝wordlist,將附件中的wordlist和stopword兩個檔案放到/usr/local/mysql/share/mysql中

3. 進入mysql,安裝外掛

mysql> install plugin thunder_ft soname 'libthunder_ft.so';

4. 建索引時增加 with parser thunder_ft 修飾

mysql> alter table review add fulltext index i_title_content(title, content) with parser thunder_ft;

5. 使用全文索引

mysql> select * from review where match(title, content) against('+大顯 +手機' in boolean mode);
注意match中必須列出索引中的每一項。如果希望對title單獨檢索,則必須要為title這一列單獨建一個索引。

6. 可以檢視外掛被呼叫了多少次用於分詞

mysql> show global status like 'thunder_ft_called';

7. 因為要將wordlist放在記憶體中,所以這個外掛會使用十幾兆的記憶體。當不需要使用時,可以解除安裝。

mysql> uninstall plugin thunder_ft;


thunder_ft.c
wordlist