陸 云
摘要:介紹了實現(xiàn)全文檢索的三個組件(Tomcat、JSP、Lucene)對應(yīng)全文檢索系統(tǒng)結(jié)構(gòu).給出了具體實現(xiàn)的運作流程和主要部分的核心代碼及相應(yīng)說明。
關(guān)鍵詞:Tomcat+JSP+Lucene運作流程核心代碼說明
中圖分類號TP311.56
文獻標(biāo)識碼B文章編號:1002-2422(2007)03-0029-02
1Tomcat+JSP+Lvcene
1.1Tomcat的Web服務(wù)器
Web服務(wù)器是在網(wǎng)絡(luò)中為實現(xiàn)信息發(fā)布、資料查詢、數(shù)據(jù)處理等諸多應(yīng)用搭建基本平臺的服務(wù)器。Tomcat Server是根據(jù)Servlet和JSP規(guī)范進行執(zhí)行的,是一個十分有用的網(wǎng)絡(luò)應(yīng)用開發(fā)服務(wù)平臺。它的下載、安裝、使用見網(wǎng)站:http://Aomcat.apache.org/
1.2JSP(Java Server Pages)
JSP(Java Server Pages)是由Sun Microsystems公司倡導(dǎo)、許多公司參與一起建立的一種動態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn)。JSP技術(shù)是用JAVA語言作為腳本語言的,JSP網(wǎng)頁為整個服務(wù)器端的JAVA庫單元提供了一個接口來服務(wù)于HTTP的應(yīng)用程序。
在傳統(tǒng)的網(wǎng)頁HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP標(biāo)記(tag),就構(gòu)成了JSP網(wǎng)頁(*.jsp)。Web服務(wù)器在遇到訪問JSP網(wǎng)頁的請求時,首先執(zhí)行其中的程序片段,然后將執(zhí)行結(jié)果以HTML格式返回給客戶。
1.3Lucene
Lucene是Apache的開源項目,是用Java寫的全文索引引擎工具包。它提供了許多簡單實用的API,用這些API,就可以方便的嵌入到各種應(yīng)用中,對任何基于文本的數(shù)據(jù)進行全文檢索。
Lucene是用Java寫的,它的運行、調(diào)試都需要有JavaSDK。Lucene的下載、安裝、使用見網(wǎng)站:http://Aucene.apache.org/
2全文檢索的實現(xiàn)
2.1全文檢索系統(tǒng)的結(jié)構(gòu)
全文檢索系統(tǒng)是按照全文檢索理論建立起來的用于提供全文檢索服務(wù)的軟件系統(tǒng)。一般來說,全文檢索需要具備建立索引和提供查詢的基本功能,此外現(xiàn)代的全文檢索系統(tǒng)還需要具有方便的用戶接口、面向www的開發(fā)接口、二次應(yīng)用開發(fā)接口等等。結(jié)構(gòu)上,全文檢索系統(tǒng)核心具有索引引擎、查詢引擎、文本分析引擎、對外接口等等,加上各種外圍應(yīng)用系統(tǒng)等共同構(gòu)成了全文檢索系統(tǒng)。當(dāng)然,全文檢索系統(tǒng)中最為關(guān)鍵的部分是全文檢索引擎,各種應(yīng)用程序都需要建立在這個引擎之上。
(1)核心部分+檢索引擎:在java平臺上,便用Lucene的API編輯、調(diào)試好全文檢索程序*.java;
(2)開發(fā)接口:編輯*.html文件,加入調(diào)試好的全文檢索程序*.java和相應(yīng)的JSP標(biāo)記(tag);
(3)Web應(yīng)用程序:Tomcat提供網(wǎng)絡(luò)應(yīng)用開發(fā)服務(wù)平臺,在它的基礎(chǔ)上執(zhí)行*.jsp,最后的程序以*.jsp的形式出現(xiàn),執(zhí)行時先啟動Tomcat,設(shè)定好端口,在地址欄輸入相應(yīng)的*.jsp。
2.2全文檢索實現(xiàn)主要部分的核心代碼和相應(yīng)分析
一個全文檢索系統(tǒng)的核心部分是建立索引,形成索引文件,然后依據(jù)客戶輸入的索引關(guān)鍵字(詞),再查找索引文件,形成對應(yīng),最后按客戶的要求返回檢索結(jié)果,好的檢索程序應(yīng)提供良好界面便于客戶查看檢索結(jié)果。
下面附具體實現(xiàn)對應(yīng)各主要部分的核心代碼和相應(yīng)分析。
2.2.1建立索引
程序中所用類別:
page import=“java.io.*,org.apache.lucene.analysis.*,org.apache.lucene.document.*,org.apache.lucene.index.*,org.apache.lucene.searchh.*,org.apache.lucene.queryPamer.*,org.apoche.lucene.analysis.cn.ChineseAnalyzer,org.apache.lucene.store.Directery,org.apache.lucene.store.FSDirectory
(1)建索引的子程序
public void indexDocs(IndexWriter writer,File fileFile)throwsIOException{
∥do not try to index files that cannot be read
if(fihFile.canRead())
}
if(fileFile.isDirectory()){
String[] files=fileFile.fist();
∥an IO error could occur
if(files!=null)}
for(int i=O;i<files.length;i++){
遞歸調(diào)用,用于對于文件夾中文件的添加
indexDocs(writer,new File(Filefile,fries[i]));}
//Document表示一條被索引的記錄,對應(yīng)本程序即為一個文件,doc.add()語句應(yīng)用不同的模式加入文件的不同對象(文件名、所在文件夾、文件內(nèi)容)
Document doc=new Document();
String fdeName=fdeFile.getName();
String dirName=fileFile.getPath()。subetring(15);
doc.add(new Field(“flleName”,fdeName,F(xiàn)ield.Store.YES.Field.
Index.UN_TOKENIZED));
doe.add(new Field(“directoz7”,dirName,F(xiàn)ield.Store.YES,F(xiàn)ield.
Index.UN_TOKENIZED):
doc.add(new Field(“content”,new lnputStreamReader(new Fileln-putStream(fdeFile),“gb2312”)));
//IndexWriter專門用于索引文件的寫入操作;根據(jù)開始部分定義IndexWfiter writer,writer為IndexWriter對象writer.addDocumem(doc);
(2)索引建立的主體部分(含對以上子程序的調(diào)用)
//StandandAnalyzer是一個標(biāo)準(zhǔn)分析器,用于對要索引的內(nèi)容進行切分處理,應(yīng)用對象為英文,全文檢索程序需要對網(wǎng)站內(nèi)大量數(shù)據(jù)進行檢索,應(yīng)用對象為中文.ChineseAnalyzer為中文分析器.
Analyzer analyzer=new ChineseAnalyzer();
IndexWriter iwriter=new IndexWriter(“webapps/search/testindex”,analyzer,true);
iwriter.setMaxFieldLength(25000);
//對子程序的調(diào)用
indexDocs(iwriter,new File(“webapps/search/files”));