lucene学习 内存索引库和文件索引库结合

原创 2016年05月30日 15:18:00
在lucene索引库的创建的时候,我们有两种不同的索引库创建方式

1.文件索引库

final Path docDir = Paths.get("index");
Directory directory=FSDirectory.open(Paths.get("index"));
这样创建的索引库是在本地磁盘上创建一个index文件夹,并且将索引放在index中,也称为文件索引库
优点:将索引持久化到磁盘上,能长久保存。
缺点:相比较内存索引库,读取慢

2.内存索引库

Directory directory = new RAMDirectory();
只需要一句代码,就创建了一个内存索引库
优点:读取快
缺点:不具备持久化能力,结束时候内存索引库便会删除

3.两种索引库的结合

根据两种索引库的特点我们可以将两种索引库结合起来,设计的思路是在程序启动时,将文件索引库中的索引拷贝到内存索引库中,然后让程序与内存索引库交互,当交互完毕后再将内存索引库的索引持久化到文件索引库。
/**
         * 1.创建两个索引库
         * 2.创建两个IndexWriter
         * 3.把文件索引库中的内容放到内存索引库中
         * 4.让内存索引库和客户端进行交互
         * 5.把内存索引库的内容放到文件索引库
         */
        final Path docDir = Paths.get("index");
        //创建文件索引库
        Directory fileDirectory=FSDirectory.open(Paths.get("index"));
        //创建内存索引库
        Directory ramDirectory = new RAMDirectory(FSDirectory.open(Paths.get("index")), null);

        Analyzer analyzer = new StandardAnalyzer();
        IndexWriterConfig iwc = new IndexWriterConfig(analyzer);
        //操作文件的IndexWriter
        IndexWriter fileIndexWriter = new IndexWriter(fileDirectory, iwc);
        //操作内存的IndexWriter
        Analyzer analyzer1 = new StandardAnalyzer();
        IndexWriterConfig iwc1 = new IndexWriterConfig(analyzer1);
        IndexWriter ramIndexWriter=new IndexWriter(ramDirectory, iwc1);

        Article article = new Article();
        article.setAid(1L);
        article.setTitle("lucene是一个全文检索引擎");
        article.setContent("baidu,google都是很好的全文检索引擎");

        // 创建document
        Document document = new Document();
        Field idField = new Field("aid", article.getAid().toString(),
                TextField.TYPE_STORED);
        Field titleField = new Field("title", article.getTitle().toString(),
                TextField.TYPE_STORED);
        Field contentField = new Field("content", article.getContent()
                .toString(), TextField.TYPE_STORED);
        document.add(idField);
        document.add(titleField);
        document.add(contentField);

        //把document放到内存当中
        ramIndexWriter.addDocument(document);
        ramIndexWriter.close();
        //把内存索引库的内容合并到文件索引库
        fileIndexWriter.addIndexes(ramDirectory);
        fileIndexWriter.close();
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Lucene学习笔记-内存与文件索引的简单操作

Lucene 内存索引、文件索引的一些简单操作

Lucene03---索引位置的优化(内存和磁盘配合使用)

在前面的http://xdwangiflytek.iteye.com/blog/1391510 文章里我们使用Lucene3.5做了一个Demo,在Demo中我们实现了一个创建索引和搜索的功能。那么我...

Lucene索引存储的优化

一、索引优化技巧 1.索引的合并 writer.addindexes(new Directory()[]{}); 将索引对象添加进去 思路: 使用RAMDirectory,提高索引效...

有关Lucene的问题(8):用Lucene构建实时索引的文档更新问题

在有关Lucene的问题(7),讨论了使用Lucene内存索引和硬盘索引构建实时索引的问题。 然而有的读者提到,如果涉及到文档的删除及更新,那么如何构建实时的索引呢?本节来讨论这个问题。 1、Lu...

lucene5.5创建索引和检索

lucene5.5 使用了java的NIO2.0,以前创建directory使用file换成了使用path,获取path的简单方法file.toPath(),上代码 package ...

lucene创建索引

上篇博客写了信息检索的基本知识和lucene架构,这篇博客记录一下如何在eclipse中创建索引. 1.lucene下载. 下载地址:http://archive.apache.org/dist/...
  • napoay
  • napoay
  • 2015-12-15 00:29
  • 2038

lucene4.6索引创建和搜索例子

最近无事,闲来看了看lucene4.6,也来学习一下,写了些小例子总的来说lucene全文检索步骤大体上有两方面:索引过程和搜索过程,具体如下: 1.索引过程 创建IndexWriter,它的作用...

Lucene建立索引库

问题?Lucene如何建立索引库,lucene所需要的jar包是那些  , lucene如何使用索引库,lucene的核心原理 一、Lucene是什么? 二、建立索引库 三、

Lucene总结系列(三)--总述优化方案和呈现实时内存索引实现(结合RAMDirectory源码解析)

前两篇讲清楚基础和基本api调用,接下来我们就是要进入优化篇章了。 这一篇讲述总体的优化方案,以及结合源码解析实时内存索引的实现(结合RAMDirectory源码)。

内存索引库

  • 2017-05-08 08:09
  • 67KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)