首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
中国IT教育
Google
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题
您现在的位置: 中国IT实验室 >> Java >> 核心技术 >> 网络编程 >> 正文

用Lucene做一个简单的Java搜索工具


index(IndexWriter writer, File file, FileFilter filter)调用私有方法indexDirectory(IndexWriter writer, File file, FileFilter filter)完成文件的索引。
下面是IndexException异常类。
IndexException.java
package powerwind;
 
publicclass IndexException extends Exception {
 
    public IndexException(String message) {
       super("Throw IndexException while indexing files: " + message);
    }
 
}
下面是FileFilterFactory类,返回一个特定的文件过滤器(FileFilter)。
FileFilterFactory.java
package powerwind;
 
import java.io.*;
 
publicclass FileFilterFactory {
    /**
     *静态匿名内部类
     */
    privatestatic FileFilter filter = new FileFilter() {
       publicboolean accept(File file) {
           long len;
           return file.isDirectory()||
                   (file.getName().endsWith(".java") &&
                   ((len = file.length()) > 0) && len < 1024 * 1024);
       }
    };
    publicstatic FileFilter getFilter() {
       returnfilter;
    }
}
 
main方法
    /**
     *      main方法
     */
    publicstaticvoid main(String[] args) throws Exception {
       IndexJavaFiles ijf = new IndexJavaFiles();
       Date start = new Date();
       try {
           IndexWriter writer = IndexWriterFactory.newInstance().createWriter("./index", true);
           System.out.println("Indexing ...");
           ijf.index(writer, new File("."), FileFilterFactory.getFilter());
           System.out.println("Optimizing...");
           writer.optimize();
           writer.close();
 
           Date end = new Date();
           System.out.println(end.getTime() - start.getTime() + " total milliseconds");
 
       } catch (IOException e) {
           System.out.println(" caught a " + e.getClass() + "\n with message: " + e.getMessage());
       }
    }
 
 
SearchJavaFiles.java
package powerwind;
 
import java.io.*;
 
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.*;
import org.apache.lucene.search.*;
 
publicclass SearchJavaFiles {
    private IndexSearcher searcher;
 
    private QueryParser parser;
 
    /**
     *
     *@paramsearcher
     */
    public SearchJavaFiles(IndexSearcher searcher) {
       this.searcher = searcher;
    }
 
    /**
     *
     *@paramfield
     *@paramanalyzer
     */
    publicvoid setParser(String field, Analyzer analyzer) {
       setParser(new QueryParser(field, analyzer));
    }
 
    /**
     *@paramparser
     */
    publicvoid setParser(QueryParser parser) {
       this.parser = parser;
    }
 
    /**
     *
     *@paramquery
     *@returnHits
     *@throwsSearchException
     */
    public Hits serach(Query query) throws SearchException {
       try {
           returnsearcher.search(query);
       } catch (IOException ioe) {
           thrownew SearchException(ioe.getMessage());
       }
    }
 
    /**
     *
     *@paramqueryString
     *@returnHits
     *@throwsSearchException
     */
    public Hits serach(String queryString) throws SearchException {
       if (parser == null)
           thrownew SearchException("parser is null!");
       try {
           returnsearcher.search(parser.parse(queryString));
       } catch (IOException ioe) {
           thrownew SearchException(ioe.getMessage());
       } catch (ParseException pe) {
           thrownew SearchException(pe.getMessage());
       }
    }
 
    /**
     *
     *输出hits的结果,从start开始到end,不包括end
     *
     *@paramhits
     *@paramstart
     *@paramend
     *@throwsSearchException
     */
    publicstatic Hits display(Hits hits, int start, int end) throws SearchException {
       try {
           while (start < end) {
              Document doc = hits.doc(start);
              String path = doc.get("path");
              if (path != null) {
                  System.out.println((start + 1) + "- " + path);
              } else {
                  System.out.println((start + 1) + "- " + "No such path");
              }
              start++;
           }
       } catch (IOException ioe) {
           thrownew SearchException(ioe.getMessage());
       }
       return hits;
    }
 

上一页  [1] [2] [3] 下一页

【责编:Peng】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Java 频道导航