`

拨乱反正:“通过RAMDirectory缓写提高性能”是错误的!

阅读更多

错误有二:

其一:程序错误,ramwriter的关闭时机有问题,应在合并之前关闭。

FSDirectory fsDir = FSDirectory.getDirectory("/data/index", true);
RAMDirectory ramDir = new RAMDirectory();
IndexWriter fsWriter = new IndexWriter(fsDir, new StandardAnalyzer(), true);
IndexWriter ramWriter = new IndexWriter(ramDir, new StandardAnalyzer(), true);
while (there are documents to index)
{
... create Document ...
ramWriter.addDocument(doc);
if (condition for flushing memory to disk has been met)
{
fsWriter.addIndexes(new Directory[] { ramDir });
ramWriter.close();//这一行位置错误,应移到上一行的上面
ramWriter = new IndexWriter(ramDir, new StandardAnalyzer(), true);
}
}

 




其二:这样并不能提高性能,反而会更慢。

测试数据如下:
文件系统现有文件大小            内存索引大小        lucene版本    用时       
767M            <1k        2.2    272203    134250   
770K                        297    391                           

2.4-1.4G                    2.4.1    164781    66938    67578


2.4版本的确比2.2的快一倍。

而如果直接写入文件系统,1.5G的现有索引文件,写入一条document只需要31ms。

分享到:
评论

相关推荐

    lucene3.0-api.CHM

    3. 多线程支持:Lucene支持多线程索引和搜索,以提高并发性能。 4. 跨语言搜索:通过使用不同的Analyzer,Lucene支持多种语言的文本处理。 5. 排序与过滤:除了基于评分的排序外,还可以根据自定义字段进行排序。...

    lucene 2.0 api以及lucene 3.0 api

    8. **查询性能监控**: 添加了 `QueryCachingPolicy`,用于智能缓存查询结果,提高重复查询的响应速度。 通过 `API_lucene3.0.0.chm` 文件,开发者可以找到完整的 Lucene 3.0 API 文档,包括类、方法、接口的详细...

    lucene2.9.1所有最新开发包及源码及文档

    //关闭索引写出器,此时才把索引写到目标存储地 2) Directory: 索引存放地。 a) 文件系统:FSDirectory: FSDirectory.open(File file); b) 内存RAMDirectory: new RAMDirectory(); 3) Analyzer: 分词器。 a...

    RAMDirectoryTest用于统计lucene字符在文档中出现次数

    RAMDirectoryTest用于统计lucene字符在文档中出现次数

    lucene包,lucene实现核心代码

    - `Optimize()`方法用于合并索引段,减少索引文件的数量,提高搜索性能。 - `Commit()`和`Rollback()`用于保存和撤销索引变更。 6. **扩展与自定义**: - Lucene允许开发者自定义Analyzer、Similarity、Filter等...

    lucene-2.3.0-src

    4. **存储模块**:`RAMDirectory`和`FSDirectory`提供内存和文件系统上的索引存储。 三、主要特性 1. **多线程支持**:2.3.0版本增强了多线程索引和搜索的性能,使得并发操作更为高效。 2. **查询优化**:优化了...

    lucence 索引合并 汇总

    ### Lucene索引合并知识点详解 #### 一、Lucene简介 Apache Lucene是一个高性能、全功能的文本搜索引擎库。它提供了一套完整的文本搜索...此外,通过分批合并的方式,还可以更好地利用内存资源,提高系统的整体性能。

    Lucene 7.2.1 官方jar包

    总结来说,Lucene 7.2.1 是一个强大的全文检索工具,通过其丰富的功能和高效性能,为开发者提供了构建强大搜索引擎的可能。对于需要处理大量文本数据的应用,使用Lucene进行索引和查询无疑是一个明智的选择。

    最新版linux lucene-8.10.0.tgz

    Linux Lucene 8.10.0是Apache Lucene项目的一个关键版本,它是一个高性能、全功能的文本搜索库,广泛应用于Java开发中。Lucene提供了丰富的搜索功能,包括全文检索、高级分析器、索引优化等,为开发者构建复杂的搜索...

    Apache Lucene-4.10.3源码

    NIOFSDirectory利用Java NIO进行文件访问,提高性能。 8. **分布式搜索**:通过Solr或Elasticsearch等项目,Lucene可以扩展到分布式环境,支持大规模的数据和高可用性,满足企业级搜索需求。 9. **优化和合并**:...

    lucene 2.9.4 api

    - **缓存优化**:使用BitSet和FilterCache提高查询性能。 - **多线程索引**:通过MultiThreadedIndexWriter提高索引构建速度。 - **自定义评分**:通过Similarity类实现自定义评分算法。 - **查询改写**:...

    Lucene 2 教程

    4. **优化索引**:IndexWriter 可以进行索引合并,提高搜索性能。 **四、Lucene 2 的优化与扩展** 1. **缓存机制**:使用 TermVector 和 DocValues 可以缓存某些字段信息,加快搜索速度。 2. **多线程支持**:...

    lucene-6.5.1

    - **稳定性增强**: 通过对已知问题的修复和测试,新版在稳定性方面有了显著提高,减少了运行时可能出现的错误。 ### 安装与配置 #### 下载 根据描述中的“最新官网下载”,用户可以从Apache官方网站或者镜像站点...

    lucene-api.rar_lucene

    - **缓存优化**: 使用FilterCache和QueryCache提高查询性能。 - **近实时搜索**: Lucene的NRT(Near Real Time)机制允许在索引更新后几乎立即进行搜索。 总之,Lucene API提供了丰富的工具和类来实现全文索引和...

    android+lucene实现全文检索并高亮关键字

    在Android平台上实现全文检索并高亮关键字是一项技术挑战,但通过集成Apache Lucene库,可以有效地解决这个问题。Apache Lucene是一个高性能、可扩展的信息检索库,它为开发人员提供了强大的文本搜索功能。以下是对...

    Lucene 3.0 原理与代码分析完整版

    5. 多线程支持:允许多个线程同时读写索引,提高性能。 通过对《Lucene 3.0 原理与代码分析完整版》的学习,开发者不仅可以理解Lucene的工作原理,还能掌握如何定制化Lucene以满足特定需求,从而在实际项目中充分...

    Lucene-2.3.1 源代码阅读学习

    - **Merge Policy**:决定何时和如何合并索引段,以优化存储空间和提高搜索性能。 - **Optimize**:合并所有索引段成一个,减少磁盘I/O,但可能增加索引时间。 - **UpdateDocument**:替换已存在文档,而不是删除...

    Lucene.Net-2.0.doc.zip

    为了提高性能,开发者可以关注以下优化策略: 1. **批量索引**: 大量文档一次性索引,减少磁盘I/O次数。 2. **缓存管理**: 合理使用 TermVector、Norm 和 DocValues 缓存,加速搜索。 3. **查询优化**: 使用 ...

    Lucene.net-4.8.0 -new Bate.rar

    - **Store**:用于存储索引数据的接口和实现,包括RAMDirectory和FSDirectory等。 通过阅读源码,开发者可以深入理解其内部工作原理,定制自己的搜索引擎解决方案。 四、案例实践 Lucene.Net 4.8.0搭配盘古分词,...

    LuceneInAction源码

    此外,`Directory`接口管理索引的存储,不同的实现(如`RAMDirectory`和`FSDirectory`)会影响性能。 通过阅读和理解《Lucene实战》的源码,开发者不仅能掌握Lucene的基本用法,还能深入了解其内部机制,从而更好地...

Global site tag (gtag.js) - Google Analytics