Lucene入门建立索引和搜索

    Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎.

    下面让我们看看它的基本使用方法.

public class HellowLuence {
    /**
     * 建立索引
     */
    public void index() {
        // 1、创建Directory
        // Directory directory = new RAMDirectory();// 建立在内存中的
        Directory directory = null;
        try {
            directory = FSDirectory.open(new File("D:/index"));// 创建在硬盘中
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        // 2、创建IndexWriter
        IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35));
        IndexWriter writer = null;

        try {
            writer = new IndexWriter(directory, iwc);

            // 3、创建Document对象
            Document doc = null;
            // 4、位Docuent 添加Field
            File f = new File("D:/lucene");
            for (File file : f.listFiles()) {
                doc = new Document();
                doc.add(new Field("content", new FileReader(file)));
                doc.add(new Field("filename", file.getName(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                doc.add(new Field("path", file.getAbsolutePath(), Field.Store.YES, Field.Index.NOT_ANALYZED));

                // 5通过IndexWriter添加文档到索引中
                writer.addDocument(doc);
            }
        } catch (CorruptIndexException e) {
            e.printStackTrace();
        } catch (LockObtainFailedException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (CorruptIndexException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

 

    /**
     * 搜索
     */
    public void searcher() {
        // 1.创建Directory
        try {
            Directory directory = FSDirectory.open(new File("D:/index"));
            // 2.创建IndedxReaer
            IndexReader reader = IndexReader.open(directory);
            // 3.根据IndexReader创建IndexSearcher
            IndexSearcher searcher = new IndexSearcher(reader);
            // 4.创建搜索Query
            // 创建parser来确定要搜索文件的内容,第二个参数表示要搜索的域
            QueryParser parser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));
            // 创建query,表示搜索域为content中包含java的文档
            Query query = parser.parse("太多");
            // 5.根据searcher搜索并且返回TopDocs
            TopDocs tds = searcher.search(query, 10);
            // 6.根据TopDocs获取ScoreDoc对象
            ScoreDoc[] sds = tds.scoreDocs;
            for (ScoreDoc sd : sds) {
                Document d = searcher.doc(sd.doc);
                System.out.println(d.get("filename") + "[" + d.get("path") + "]");
            }
            // 关闭reader
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}
 

方法写完后进行测试

public class test {
    @Test
    public void test1() {
        HellowLuence hellowLuence = new HellowLuence();
        hellowLuence.index();
    }

运行结果

223544_D399_3208051.png

    @Test
    public void test2() {
        HellowLuence hellowLuence = new HellowLuence();
        hellowLuence.searcher();
    }

223604_6JEw_3208051.png

}

转载于:https://my.oschina.net/u/3208051/blog/1154603

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值