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