lyyb2001

只是为方便自己找记录而已
posts - 57, comments - 27, trackbacks - 0, articles - 5
  BlogJava :: 首页 :: 新随笔 :: 联系 ::  :: 管理

Lucene:日志查询(二)[创建索引]

Posted on 2007-03-05 08:51 skycity 阅读(448) 评论(0)  编辑  收藏 所属分类: APACHE开源项目

Struts 框架的一大优势在于它允许开发人员根据实际需要来扩展框架,定制客户化的功能。
Struts1.1
框架提供了动态插入和加载组件的功能,这种组件被称为 Struts 插件。 Struts 插件实际上就是一个 Java 类,它在 Struts 应用启动时 Struts 框架调用每个插件的 init ()方法进行初始化,在插件的初始化阶段可以完成一些初始化的操作,如建立数据库连接,和远程系统建立连接 , 在当前的应用范围内加入插件类自身的实例等。在应用关闭时 Struts 框架会调用每个插件的 destroy() 方法, destroy() 方法可以用来完成释放资源的任务,如关闭数据库连接,断开与远程的连接等。任何作为插件的 Java 类都应该实现 org.apache.struts.action.PlugIn 接口。 PlugIn 接口包括两个方法
    public interface PlugIn {
        /**
        *
struts 应用启动时,下面的方法将被调用执行
        */
        public void init(ActionServlet servlet, ApplicationConfig config)
              throws ServletException;

       /**
       *
struts 应用关闭时,将调用下面的方法,以释放资源。
       */
        public void destroy(); 
    }
现在我们用 PLUGIN 实现日志的创建
< 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;//设置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

只有注册用户登录后才能发表评论。


网站导航: