MySQL中文全文索引插件 mysqlcft 1.0.0 安裝使用文檔
來(lái)源:程序員人生 發(fā)布時(shí)間:2014-02-10 12:23:03 閱讀次數(shù):3682次
MySQL在高并發(fā)連接、數(shù)據(jù)庫(kù)記錄數(shù)較多的情況下,SELECT ... WHERE ... LIKE '%...%'的全文搜索方式不僅效率差,而且以通配符%和_開(kāi)頭作查詢(xún)時(shí),使用不到索引,需要全表掃描,對(duì)數(shù)據(jù)庫(kù)的壓力也很大。MySQL針對(duì)這一問(wèn)題提供了一種全文索引解決方案,這不僅僅提高了性能和效率(因?yàn)镸ySQL對(duì)這些字段做了索引來(lái)優(yōu)化搜索),而且實(shí)現(xiàn)了更高質(zhì)量的搜索。但是,至今為止,MySQL對(duì)中文全文索引無(wú)法正確支持。
中文與西方文字如英文的一個(gè)重要區(qū)別在于,西方文字以單詞為單位,單詞與單詞之間以空格分隔。而中文以字為單位,詞由一個(gè)或多個(gè)字組成,詞與詞之間沒(méi)有空格分隔。當(dāng)試圖在一個(gè)含有中文字符的字段中使用全文搜索時(shí),不會(huì)得到正確的結(jié)果,原因在于中文中沒(méi)有像英文空格那樣對(duì)詞定界,不能以空格作為分割,對(duì)中文詞語(yǔ)進(jìn)行索引。
引用《
MySQL 5.1參考手冊(cè)》中的一段話:
12.7. 全文搜索功能(
http://dev.mysql.com/doc/refman/5.1/zh/functions.html)
● MySQL支持全文索引和搜索功能。MySQL中的全文索引類(lèi)型FULLTEXT的索引。FULLTEXT 索引僅可用于 MyISAM 表;他們可以從CHAR、 VARCHAR或TEXT列中作為CREATE TABLE語(yǔ)句的一部分被創(chuàng)建,或是隨后使用ALTER TABLE 或 CREATE INDEX被添加。對(duì)于較大的數(shù)據(jù)集,將你的資料輸入一個(gè)沒(méi)有FULLTEXT索引的表中,然后創(chuàng)建索引, 其速度比把資料輸入現(xiàn)有FULLTEXT索引的速度更為快。
● FULLTEXT分析程序會(huì)通過(guò)尋找某些分隔符來(lái)確定單詞的起始位置和結(jié)束位置,例如' ' (間隔符號(hào))、 , (逗號(hào))以及 . (句號(hào) )。假如單詞沒(méi)有被分隔符分開(kāi),(例如在中文里 ), 則 FULLTEXT 分析程序不能確定一個(gè)詞的起始位置和結(jié)束位置。為了能夠在這樣的語(yǔ)言中向FULLTEXT 索引添加單詞或其它編入索引的術(shù)語(yǔ),你必須對(duì)它們進(jìn)行預(yù)處理,使其被一些諸如"之類(lèi)的任意分隔符分隔開(kāi)。
● 諸如漢語(yǔ)和日語(yǔ)這樣的表意語(yǔ)言沒(méi)有自定界符。因此, FULLTEXT分析程序不能確定在這些或其它的這類(lèi)語(yǔ)言中詞的起始和結(jié)束的位置。
國(guó)內(nèi)已有的MySQL中文全文索引解決方案有兩個(gè):一是海量科技的
MySQL5.0.37--LinuxX86-Chinese+,二是hightman開(kāi)發(fā)的
mysql-5.1.11-ft-hightman,兩者都是基于中文分詞技術(shù),對(duì)中文語(yǔ)句進(jìn)行拆分。但是,兩者都有弊端,一是不支持64位操作系統(tǒng);二是對(duì)修改了MySQL源碼,只支持某一MySQL版本,不便于跟進(jìn)新版本;三是詞庫(kù)不能做到很大很全,對(duì)于專(zhuān)業(yè)性質(zhì)較強(qiáng)的數(shù)據(jù)庫(kù)內(nèi)容(例如搜索“頤和園路東口”、“清華東路西口”等公交站點(diǎn),“萊鎮(zhèn)香格里”、“碧海云天”等樓盤(pán)名稱(chēng)),基于中文分詞的全文索引經(jīng)常搜索不出來(lái)任何內(nèi)容,即使添加分詞詞庫(kù),也不會(huì)很全面。
由于精準(zhǔn)全文查詢(xún)的需要,我借鑒了二元交叉切分算法的思想,用自創(chuàng)的“三字節(jié)交叉切分算法”,寫(xiě)出了這款“MySQL中文全文索引插件──mysqlcft 1.0.0”。由于開(kāi)發(fā)時(shí)間倉(cāng)促,難免存在未發(fā)現(xiàn)的問(wèn)題,這將后續(xù)的版本中不斷完善。對(duì)于百萬(wàn)條記錄的MySQL表進(jìn)行全文檢索,mysqlcft已經(jīng)夠用。
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)