现在的位置: 首页 > 综合 > 正文

Lucence HelloWord

2014年01月28日 ⁄ 综合 ⁄ 共 4139字 ⁄ 字号 评论关闭

需要

lucene-analyzers-3.6.2.jar

lucene-core-3.6.2.jar

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriter.MaxFieldLength;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

public class LuceneIndex {
    // 索引器

    private IndexWriter writer = null;

    public static void main(String[] args) throws Exception {

        // 申明一个对象
        LuceneIndex indexer = new LuceneIndex();
        // create index
        Date start = new Date();
        indexer.writeToIndex();
        Date end = new Date();
        System.out.println("建立索引用时" + (end.getTime() - start.getTime()) + "毫秒");
        indexer.close();
    }

    public void close() throws Exception {
        writer.close();
    }

    public LuceneIndex() throws IOException {
        Directory directory = FSDirectory.open(new File(
                Constants.INDEX_STORE_PATH));// 索引文件的存放目录
        Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
        writer = new IndexWriter(directory, analyzer, true,
                MaxFieldLength.LIMITED);
    }

    public void writeToIndex() throws IOException {
        File folder = new File(Constants.INDEX_FILE_PATH);
        if (folder.isDirectory()) {
            String[] files = folder.list();
            for (String file : files) {
                File newFile = new File(folder, file);
                Document doc = getDocument(newFile);
                System.out.println("creating Index:" + file + "");
                writer.addDocument(doc);
            }
        }
    }

    private Document getDocument(File f) throws IOException {

        Document doc = new Document();
        FileInputStream is = new FileInputStream(f);
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        String line = reader.readLine();
        StringBuffer sb = new StringBuffer();
        while (line != null) {
            sb.append(line).append("\n");
            line = reader.readLine();
        }
        doc.add(new Field("contents", sb.toString(), Field.Store.YES,
                Field.Index.ANALYZED));
        doc.add(new Field("path", f.getAbsolutePath(), Field.Store.YES,
                Field.Index.ANALYZED));
        return doc;
    }

}

import java.io.File;
import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

public class LuceneSearch {

    // 声明一个IndexSearcher对象

    private IndexSearcher searcher = null;
    // 声明一个Query对象

    private Query query = null;

    public static void main(String[] args) throws Exception {
        LuceneSearch test = new LuceneSearch();
        test.search("人");

    }

    public LuceneSearch() throws IOException, IOException {
        Directory directory = FSDirectory.open(new File(
                Constants.INDEX_STORE_PATH));// 索引文件的存放目录
        searcher = new IndexSearcher(directory);
    }

    public void search(String keyword) throws Exception {
        Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
        System.out.println("正在检索关键字 : " + keyword);
        String[] queryFileds = { "contents", "path" };
        QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_36,
                queryFileds, analyzer);
        Query query = parser.parse(keyword);
        TopDocs result = searcher.search(query, 1000);
        System.out.println("检索到" + result.totalHits + "条符合条件的数据.");
        if (result.totalHits != 0) {
            for (ScoreDoc sd : result.scoreDocs) {
                int docSn = sd.doc;
                Document doc = searcher.doc(docSn);
                System.out.println("文件名:" + doc.get("path"));
                System.out.println("文件内容:" + doc.get("contents"));
            }
        }
    }
}

【上篇】
【下篇】

抱歉!评论已关闭.