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

时间:2007-01-22 15:42:41   来源:剑心博客  作者:  点击:次  出处:技术无忧
关键字:Lucene 简单 Java 搜索


    /**
     *@paramfile
     *
     *把File变成Document
     */
    private Document parseFile(File file) throws IndexException {
       Document doc = new Document();
       doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES,
                     Field.Index.UN_TOKENIZED));
       try {
           doc.add(new Field("contents", new FileReader(file)));
       } catch (FileNotFoundException fnfe) {
           thrownew IndexException(fnfe.getMessage());
       }
       return doc;
    }
}
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());
       }
    }
 

WWW.pC51.Net


相关文章

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面