Jive筆記2----關於Jive2中的中文搜尋 (轉)

amyz發表於2007-08-15
Jive筆記2----關於Jive2中的中文搜尋 (轉)[@more@]Jive雖然構架不錯,可是在中文處理上,實在可以算是垃圾。Lucene也是如此。最新版的Lucene1.2RC2中,queryParser類竟然只能處理A-Z|a-z|0-9的搜尋。如果輸入了中文,就給你扔出一個“Lexial parse Error”的錯誤。而且,E文中的Key是根據空格區分,這不適用於中文,所以一般採用基於字典的斷詞或者OverLapped斷詞。瞭解了上面的情況,我們就可以開始修改Lucene以實現中文搜尋了。

(1)修改queryParser.jj,修改裡邊的詞法定義,以適應Unicode雙位元組。QueryParser是由CC生成的,建議瞭解一下JavaCC的語法,和EBNF概念相似。

(2)編寫一個自己的Analyzer和Tokenizer。這裡我從Lucene的 List中搞到了一個ChineseTokenizer.java,自己根據StandardAnalyzer.java寫了一個ChineseAnalyzer.java。我們將用這個分析器用Overlapped方式切割一個完整的中文語句。

(3)修改Jive2中的Query.java和SearchManager.java,
將imoprt com.lucene.*...改成import org..lucene.*...
將裡邊的StandardAnalyzer改成ChineseAnalyzer

(4)編譯,啟動Jive,Rebuild index.現在,你的Jive2就能支援中文搜尋了

注意:
Jive和AppServer必須在中文環境下執行。比如中文的NT/2000或者在/下邊設定export LC_ALL=zh_CN.
同時,Global.中加上request.setCharacterEncoding("gb2312");
分別給相關的頁面加上contentType="text/html;charset=gb2312".這樣可以不改動應付絕大多數AppServer,包括垃圾4.0.1。
還有,修改dbURL為:my://localhost/jive2?useUnicode=true&characterEncoding=gb2312
附:
修改的
QueryParser.jjzh
ChineseAnalyzer.java
zhChineseTokenizer.java
三個的Zip包

我是憑著記憶寫的。講得很模糊,也許老手不屑一顧,新手死活看不懂。對不住了,我的表達能力很差的。

Good Luck!

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958255/,如需轉載,請註明出處,否則將追究法律責任。

相關文章