Lucene:日志查詢(二)[創(chuàng)建索引]
Posted on 2007-03-05 08:51 skycity 閱讀(461) 評論(0) 編輯 收藏 所屬分類: APACHE開源項(xiàng)目
Struts
框架的一大優(yōu)勢在于它允許開發(fā)人員根據(jù)實(shí)際需要來擴(kuò)展框架,定制客戶化的功能。
Struts1.1
框架提供了動態(tài)插入和加載組件的功能,這種組件被稱為
Struts
插件。
Struts
插件實(shí)際上就是一個
Java
類,它在
Struts
應(yīng)用啟動時
Struts
框架調(diào)用每個插件的
init
()方法進(jìn)行初始化,在插件的初始化階段可以完成一些初始化的操作,如建立數(shù)據(jù)庫連接,和遠(yuǎn)程系統(tǒng)建立連接
,
在當(dāng)前的應(yīng)用范圍內(nèi)加入插件類自身的實(shí)例等。在應(yīng)用關(guān)閉時
Struts
框架會調(diào)用每個插件的
destroy()
方法,
destroy()
方法可以用來完成釋放資源的任務(wù),如關(guān)閉數(shù)據(jù)庫連接,斷開與遠(yuǎn)程的連接等。任何作為插件的
Java
類都應(yīng)該實(shí)現(xiàn)
org.apache.struts.action.PlugIn
接口。
PlugIn
接口包括兩個方法
????public interface PlugIn {
??????? /**
??????? *
當(dāng)
struts
應(yīng)用啟動時,下面的方法將被調(diào)用執(zhí)行
??????? */
??????? public void init(ActionServlet servlet, ApplicationConfig config)
????????????? throws ServletException;
?????? /**
?????? *
當(dāng)
struts
應(yīng)用關(guān)閉時,將調(diào)用下面的方法,以釋放資源。
?????? */
??????? public void destroy();?
????}
現(xiàn)在我們用
PLUGIN
實(shí)現(xiàn)日志的創(chuàng)建
<
plug-in
className
=
"net.skycity.search.SearchEnginePlugIn"
>
???
<!--
日記索引文件存放的目錄 -->
???????
<
set-property
property
=
"logIndexPath"
value
=
"/WEB-INF/log_index"
/>
???????
<!--
中文分詞器 -->
???????
<
set-property
property
=
"analyzerClass"
value
=
"org.apache.lucene.analysis.standard.StandardAnalyzer"
/>
</
plug-in>
SearchProxyPlugIn.java
package net.skycity.search;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import org.apache.log4j.Logger;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexWriter;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
public class SearchEnginePlugIn implements PlugIn{
??? private static Analyzer analyzer;//設(shè)置lucene要用的切詞方法。
??? protected static ActionServlet servlet = null;
??? protected static String logIndexPath = "/WEB-INF/log_index";//日志索引文件存放目錄
??? protected String analyzerClass;
??? protected Logger log = Logger.getLogger(SearchEnginePlugIn.class);
??? /**
???? * 初始化
???? */
??? public void init(ActionServlet servlet, ModuleConfig config) throws ServletException{
??????? SearchEnginePlugIn.servlet = servlet;
??????? if(analyzerClass==null)
???????
?? analyzerClass = StandardAnalyzer.class.getName();
??????? try{
???????
?? analyzer = (Analyzer)Class.forName(analyzerClass).newInstance();
??????? }catch(Exception e){
???????
?? servlet.log("Initialize Analyzer Failed.",e);
??????? }
??? }
??? /**
???? * 容器停止時,銷毀
???? */
??? public void destroy() {
???
?? IndexWriter indexWriter;
?????? try {
?????????? indexWriter = getLogIndexWriter();
?????????? indexWriter.close();
?????? } catch (IOException e) {
?????????? e.printStackTrace();
?????? }
??? }
??? /**
???? * 得到日記索引的Writter
???? * @return
???? * @throws IOException
???? */
??? protected static IndexWriter getLogIndexWriter() throws IOException{
??????? String logPath = getLogIndexPath();
??????? File rp = new File(logPath);
??????? if(!rp.exists())
??????????? rp.mkdirs();
??????? File segments = new File(logPath + File.separator + "segments");
??????? boolean bCreate = !segments.exists();
??????? return new IndexWriter(logPath,analyzer,bCreate);
??? }
??? /**
???? * 得到日記索引所在的絕對路徑
???? * @return
???? */
??? public static String getLogIndexPath() {
???
?? if(logIndexPath.toUpperCase().startsWith("/WEB-INF"))
???
?????? return servlet.getServletContext().getRealPath(logIndexPath);
???
?? return logIndexPath;
??? }
??? public void setLogIndexPath(String indexPath) {
??????? logIndexPath = indexPath;
??? }
??? public static Analyzer getAnalyzer() {
??????? return analyzer;
??? }
??? public String getAnalyzerClass() {
?????? return analyzerClass;
??? }
??? public void setAnalyzerClass(String analyzerClass) {
?????? this.analyzerClass = analyzerClass;
??? }
}
Lyyb2001