使用Java API操作Lucene

第一步:创建一个动态网站项目Lucene_Test


第二步:准备好需要做索引的数据 并放到合适的目录中(F:\Files\data) 以及存放索引的目录(F:\Files\index)(不要使用中文目录)


第三步:导入Lucene-4.9.1的jar包


导入hadoop的常用包 便于进行文件处理


第三步:创建CreateIndex类 代码如下

package com.lucene;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.*;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.util.Collection;


public class CreateIndex {

    public static final String indexDir="F:/Files/index";
    public static final String dataDir="F:/Files/data";
    @Test
    public void createIndex(){
        try {
            Directory dir = FSDirectory.open(new File(indexDir));
            Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_4_9);
            IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_4_9,analyzer);
            config.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND);
            IndexWriter writer = new IndexWriter(dir,config);
            File file = new File(dataDir);
            File [] files = file.listFiles();
            for(File f:files){
                Document doc = new Document();
                doc.add(new StringField("title",f.getName(), Field.Store.YES));
                doc.add(new StringField("content", FileUtils.readFileToString(f), Field.Store.YES));
                doc.add(new LongField("lastmodified", f.lastModified(), Field.Store.YES));
                writer.addDocument(doc);
            }
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

运行成功后 可以看到index文件夹下生成了索引文件


第四步:创建SearchIndex类 代码如下

package com.lucene;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.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;
import org.junit.Test;
import java.io.File;
import java.io.IOException;

public class SearchIndex {
    @Test
    public void search(){
        try {
            Directory dir = FSDirectory.open(new File(CreateIndex.indexDir));
            IndexReader reader = DirectoryReader.open(dir);
            IndexSearcher searcher = new IndexSearcher(reader);
            StandardAnalyzer standardAnalyzer = new StandardAnalyzer(Version.LUCENE_4_9);
            QueryParser qp = new QueryParser(Version.LUCENE_4_9,"content",standardAnalyzer);
            Query query = qp.parse("java");
            TopDocs search = searcher.search(query, 10);
            ScoreDoc[] scoreDocs = search.scoreDocs;
            for(ScoreDoc sc:scoreDocs){
                int docId = sc.doc;
                Document document = reader.document(docId);
                System.out.println(document.get("filename"));;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

运行即可看到“java”这个关键字出现在哪几个文件里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值