最近由于項(xiàng)目需要,開始對全文檢索做些了解,剛剛開始,由于項(xiàng)目人力的嚴(yán)重不足,我沒有太多的時(shí)間進(jìn)行細(xì)致的研究,不知道能走到如何的一個(gè)深度,走一步,看一步吧。
我用java做的開發(fā),由于數(shù)據(jù)庫表并不多,我沒有采用hibernate或者其他的持久層,而是直接使用了jdbc進(jìn)行數(shù)據(jù)庫操作。數(shù)據(jù)庫使用的是Mysql。
做搜索,第一想到的就是like了,后來發(fā)現(xiàn)條件可能比較復(fù)雜,效率可能低下,于是準(zhǔn)備添加全文檢索的搜索模式。
第一類:數(shù)據(jù)庫內(nèi)嵌全文檢索
第一種方案:毫無疑問,最為省事的還是數(shù)據(jù)庫直接幫我搞定,我無須安裝新的東西,也不用花太多的時(shí)間做新的研究。
??????我用的是Mysql5.1。查官方文檔,使用全文檢索技術(shù)很簡單:
??????把表建成MyIsam的,
??????然后導(dǎo)入數(shù)據(jù),
??????然后建立fulltext索引,
??????然后,調(diào)整什么最小詞長(這個(gè)部分我還沒做就發(fā)現(xiàn)問題了,節(jié)約了一部分工作量),
??????然后寫一個(gè)select * from tbl where match (col1,col2) against ("關(guān)鍵字1","關(guān)鍵字2")的sql,
??????于是發(fā)現(xiàn)沒有任何的返回記錄。上網(wǎng)google了一下,才知道m(xù)ysql不支持中文的全文,在Mysql5.1參考手冊12.7.4中有這么一段話:
????? 諸如漢語和日語這樣的表意語言沒有自定界符。因此, FULLTEXT分析程序不能確定在這些或其它的這類語言中詞的起始和結(jié)束的位置。其隱含操作及該問題的一些工作區(qū)在12.7節(jié),“全文搜索功能”有詳細(xì)論述。
??????但我沒有找到任何關(guān)于這個(gè)部分的描述,所以我暫時(shí)認(rèn)為Mysql直到現(xiàn)在對中文的全文檢索依然沒有支持。
第二種方案:修改版的mysql,因?yàn)閙ysql是開源的軟件,那么mysql本身不支持,有沒有中文版的能支持呢,在google中順手搜到了一個(gè),海量公司研發(fā)了一個(gè),網(wǎng)址:http://www.hylanda.com/,由于不是開源的,公司是商業(yè)化運(yùn)作,加上網(wǎng)上應(yīng)用的人好像也不多,故而這個(gè)方案也被擱置了。
第三種方案:插件,網(wǎng)上能夠google到的就是這樣一個(gè):http://myft.twomice.net/,目前好像是開源運(yùn)作,我還沒有嘗試,粗略看了一下,怎么還要自己編譯mysql,好像和插件的概念有些出入,不過總的來說,這個(gè)方式還是值得嘗試的。
第四種方案:更換數(shù)據(jù)庫,目前還有oracle,ms-sql可以選擇,這兩個(gè)的中文搜索不知道做的如何,如果不錯(cuò)的,而mysql又不能解決的話,就換數(shù)據(jù)庫吧,我想用oracle應(yīng)該好一些。
第二類:開源全文檢索引擎
目前最火的就是lucene吧,可以研究研究。
在搜索中發(fā)現(xiàn)了這樣一篇博客文章,加上,以備查。
http://blog.csdn.net/jeafyezheng/archive/2006/09/29/1306463.aspx
我用java做的開發(fā),由于數(shù)據(jù)庫表并不多,我沒有采用hibernate或者其他的持久層,而是直接使用了jdbc進(jìn)行數(shù)據(jù)庫操作。數(shù)據(jù)庫使用的是Mysql。
做搜索,第一想到的就是like了,后來發(fā)現(xiàn)條件可能比較復(fù)雜,效率可能低下,于是準(zhǔn)備添加全文檢索的搜索模式。
第一類:數(shù)據(jù)庫內(nèi)嵌全文檢索
第一種方案:毫無疑問,最為省事的還是數(shù)據(jù)庫直接幫我搞定,我無須安裝新的東西,也不用花太多的時(shí)間做新的研究。
??????我用的是Mysql5.1。查官方文檔,使用全文檢索技術(shù)很簡單:
??????把表建成MyIsam的,
??????然后導(dǎo)入數(shù)據(jù),
??????然后建立fulltext索引,
??????然后,調(diào)整什么最小詞長(這個(gè)部分我還沒做就發(fā)現(xiàn)問題了,節(jié)約了一部分工作量),
??????然后寫一個(gè)select * from tbl where match (col1,col2) against ("關(guān)鍵字1","關(guān)鍵字2")的sql,
??????于是發(fā)現(xiàn)沒有任何的返回記錄。上網(wǎng)google了一下,才知道m(xù)ysql不支持中文的全文,在Mysql5.1參考手冊12.7.4中有這么一段話:
????? 諸如漢語和日語這樣的表意語言沒有自定界符。因此, FULLTEXT分析程序不能確定在這些或其它的這類語言中詞的起始和結(jié)束的位置。其隱含操作及該問題的一些工作區(qū)在12.7節(jié),“全文搜索功能”有詳細(xì)論述。
??????但我沒有找到任何關(guān)于這個(gè)部分的描述,所以我暫時(shí)認(rèn)為Mysql直到現(xiàn)在對中文的全文檢索依然沒有支持。
第二種方案:修改版的mysql,因?yàn)閙ysql是開源的軟件,那么mysql本身不支持,有沒有中文版的能支持呢,在google中順手搜到了一個(gè),海量公司研發(fā)了一個(gè),網(wǎng)址:http://www.hylanda.com/,由于不是開源的,公司是商業(yè)化運(yùn)作,加上網(wǎng)上應(yīng)用的人好像也不多,故而這個(gè)方案也被擱置了。
第三種方案:插件,網(wǎng)上能夠google到的就是這樣一個(gè):http://myft.twomice.net/,目前好像是開源運(yùn)作,我還沒有嘗試,粗略看了一下,怎么還要自己編譯mysql,好像和插件的概念有些出入,不過總的來說,這個(gè)方式還是值得嘗試的。
第四種方案:更換數(shù)據(jù)庫,目前還有oracle,ms-sql可以選擇,這兩個(gè)的中文搜索不知道做的如何,如果不錯(cuò)的,而mysql又不能解決的話,就換數(shù)據(jù)庫吧,我想用oracle應(yīng)該好一些。
第二類:開源全文檢索引擎
目前最火的就是lucene吧,可以研究研究。
在搜索中發(fā)現(xiàn)了這樣一篇博客文章,加上,以備查。
http://blog.csdn.net/jeafyezheng/archive/2006/09/29/1306463.aspx