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