—— 適百千萬資料量以上的站內搜尋,平民級的解決方案
環境:LINUX MYSQL4/5(5以上的版本直接可以在外掛程式形式編譯進MYSQL內)
使用MYSQL的朋友一定有這樣的經曆,那就是在檢索中文的時候往往力不從心。使用LIKE的效率實在不敢恭維,而且對搜尋的結果也不是很滿意的。 很希望有一個完美的解決方案。但是事實的真相是殘酷的。這個完美的方案可能讓你絞盡腦汁還是兩手空空。
今天我給大家帶來的 MYSQL中文分詞全文檢索索引 可能會讓您有一種相見恨晚的感覺。
下面開始講解:
在豬肉還是7塊多的時候,我在CU裡閑逛。突然看到一個大板(HIGHTMAN)的文章。(我不記得地址了).
大致內容就是修改MYSQL的源碼。加入中文分詞功能。原理依據的是一個強大的中文詞典。(詳細可進該大牛首頁hightman.cn查看)
所以我得聲明一下。該功能的著作權歸HIGHTMAN大牛所有。本人不涉及著作權問題。
可喜的是該牛的MYSQL修改版是在GPL發放的。所在大家不用擔心(除非你想自己打磨)。
好囉嗦啊,扯了大半天還沒到正題。我也覺得我自己好囉嗦,黃金又漲價了,哎。牛奶都從46漲到了65一箱了。
----------------------OH YEAH SO HOT!----------------------------
開始:
cd/ /home/apps
wget http://www.hightman.cn/down/mysql-5.1.11-hi1.tgz
tar zxf mysql-5.1.11-hi1.tgz
cd mysql-5.1.11-hi1
#開始編譯,加入分詞外掛程式
./configure --prefix=/usr/local/mysql --with-charset=gbk --with-extra-charsets=all --with-plugins=fthightman
make
make install
#你如果嫌麻煩也可以 make && make install 該過程比較漫長(取決於機器效能了)
#複製my.cnf到系統啟動項
cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
#增加mysql使用者組
groupadd mysql
useradd -g mysql mysql
#初始化
cd /usr/local/mysql
bin/mysql_install_db --user=mysql |註:--user=mysql 初始化表並且規定用mysql使用者
#設定給mysql和root使用者設定存取權限 我們先進入mysql目錄
cd /usr/local/mysql
chown -R root /usr/local/mysql |註:設定root能訪問/usr/local/mysq
chown -R mysql /usr/local/mysql/var |註:設定mysql使用者能訪問/usr/local/mysql/var
chgrp -R mysql /usr/local/mysql |註:設定mysql組能夠訪問/usr/local/mysq
bin/mysqld_safe --user=mysql & |啟動之
#設定開機就啟動mysql,進入源碼目錄下
cd /usr/local/mysql/share/mysql
cp mysql.server /etc/init.d/mysql
cd /etc/rc3.d
ln -s ../init.d/mysql S85mysql
ln -s ../init.d/mysql K85mysql
cd /etc/rc5.d
ln -s ../init.d/mysql S85mysql
ln -s ../init.d/mysql K85mysql
cd ../init.d
chmod 755 mysql
#rc3.d rc5.d明白是怎麼回事吧。不懂的自己補習去。
重啟 mysqld 伺服器
whereis mysql
/etc/init.d/mysql
service mysql
/etc/init.d/mysql start|stop|restart
#以下的情況我們假定您已經有了APCHE PHP環境。
開始:
注意。MYSQL預設的字元編碼是GBK。所以在這裡建的表最好也是GBK的UTF8的需要改一下MYSQL預設編碼再進行如下操作
DATABASEB1
show databases;
use db1;
#DB1裡有個表叫TABLE1
TABLE1 欄位為:
aid
gid
uid
atitle
acontent
請注意。atitle,acontent 這兩個裡面放的是我們需要檢索的內容。
下面建立全文索引 也就是FULLTEXT
alter table1 add fulltext ft_gbk(atitle,acontent) with parser hightman;
這樣索引就建成了。
PHP查詢語句為
select * from table1 where match(atitle,acontent) against('$keyword');
返回結果就跟普通一樣引用就可以了。
值得一提的是速度非常快。
100萬的資料通常檢索不到0.5秒。
轉自:http://www.51testing.com/html/87/n-130087.html