`
karlmax
  • 浏览: 42454 次
  • 来自: ...
社区版块
存档分类
最新评论

Lucene RAMDirectory 慎用

阅读更多

今天一哥们在做一个程序的时候使用了Lucene做全文检索工具,但是遇到了一个问题:首先就是检索速度非常的慢,而且只要连续检索三四次,程序马上就荡掉。通过日志发现是在CharacterEncodingFilter处报的错,没有办法只能去看filter的源代码。filter的程序很简单,只是做了request,response的编码,问题不可能出在这里啊!但是日志显示的错误信息就是从这个filter产生的,怎么回事?再看一下代码,晕:

try

{

// some code here

}

catch(Exception e)

{

//exception handling here

}

Exception太宽把底层错误屏蔽掉了,什么有价值的都看不到啊!把Exception改成IOException再试。Good 这次错误终于显示出来了:OutOfMemoryErr: Heap space

原来是内存耗尽了,好说!开始看代码中那些地方把内存吃掉了,改了一些地方(有个函数狂作字符串 +,改用StringBuffer,另外把一些循环中声明对象改为在循环开始...),重新启动服务器,这回应该没有问题了吧!OutOfMemoryErr: Heap space,日,怎么还是这个错误,再看...

终于找到了这块代码RAMDirectory ramDir = new RAMDirectory(fileName),不会是这里把内存都吃掉了吧!把这句注释掉,直接用文件方式,重起,测试,没有问题了!!!!!

看来这个RAMDirectory 是把整个索引文件的内容都放到内存中了,怪不得内存那么快就耗尽了。本来希望把文件放到内存中希望查询能快一点,没想到速度没加快反而找了不少麻烦!

仔细考虑了一下,要想使用RAMDirectory 把索引文件放到内存中不能每次查询时都重新打开RAMDirectory 。解决这个问题最好使用一个Singleton,在系统启动时把索引读到内存,查询时就直接使用。

本来是一个小问题,可是好长时间才解决,看来是经验不足,还需要锻炼!

    

分享到:
评论
5 楼 liuInsect 2012-07-19  
taburissmeng 写道
你如过没用单例的话,那就相当于没用一次就往内存里存一遍所有的索引。

已经用单例模式解决了
4 楼 taburissmeng 2012-07-14  
你如过没用单例的话,那就相当于没用一次就往内存里存一遍所有的索引。
3 楼 whiletrue 2012-03-16  
不是慎用,是你用的不对嘛。
2 楼 liuInsect 2012-02-13  
那你知道怎么去读内存中的索引吗?? 我找了很久了  没这方面的资料啊???
1 楼 geszJava 2007-09-13  
吓我一跳....

相关推荐

    lucene,lucene教程,lucene讲解

    第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。 public void add(Query query, BooleanClause.Occur occur) BooleanClause用于表示布尔查询子句关系的类,包括: BooleanClause.Occur.MUST,...

    lucene讲义 叫你用lucene算法

    《教你运用Lucene算法》 Lucene是一款强大的全文搜索引擎库,它提供了丰富的信息检索功能,包括文本分析、索引构建、搜索以及结果排名等。在深入理解Lucene的工作原理时,我们首先要关注的是其核心算法。 一、单个...

    lucene 2.0 api以及lucene 3.0 api

    5. **内存索引与磁盘索引**: `RAMDirectory` 用于内存中的索引,而 `FSDirectory` 则用于磁盘上的索引,两者可以根据需求灵活选择。 **Lucene 3.0 API 更新与改进** 1. **SegmentMerger 改进**: Lucene 3.0 中,`...

    lucene包,lucene实现核心代码

    Lucene是Apache软件基金会的一个开放源代码项目,它是一个全文搜索引擎库,主要用Java编写,但也有其他语言的版本。Lucene提供了高级的文本分析、索引和搜索功能,是构建高效、可扩展的信息检索应用的基础。在Java的...

    lucene3.0 lucene3.0

    lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0

    Lucene索引器实例

    import org.apache.lucene.store.RAMDirectory; public class LuceneIndexExample { public static void main(String[] args) throws Exception { // 创建内存目录 Directory directory = new RAMDirectory(); ...

    lucene-4.7.0全套jar包

    5. **跨平台**:Lucene用Java编写,因此可以运行在任何Java兼容平台上,具有良好的跨平台性。 在Lucene 4.7.0版本中,主要改进和新增功能包括: - **更新的分词器**:引入了新的分词器,如ICU分词器,增强了对多种...

    lucene for java 简单demo

    import org.apache.lucene.store.RAMDirectory; public class SimpleLuceneDemo { public static void main(String[] args) throws Exception { // 创建目录对象 Directory directory = new RAMDirectory(); /...

    lucene 对 xml建立索引

    ### Lucene对XML文档建立索引的技术解析与实践 #### 一、引言 随着互联网技术的迅猛发展,非结构化数据(如XML文档)在企业和组织中的应用日益广泛。如何高效地处理这些非结构化的数据,特别是进行快速检索成为了一...

    spring-lucene简单项目

    Directory则用来保存索引,可以选择不同的实现,如内存中的RAMDirectory或磁盘上的FSDirectory。IndexWriter是构建和管理索引的关键对象。 接下来,你需要创建一个索引器类,该类使用Spring的ApplicationContext...

    Lucene3.5源码jar包

    本压缩包包含的是Lucene 3.5.0版本的全部源码,对于想要深入理解Lucene工作原理、进行二次开发或者进行搜索引擎相关研究的开发者来说,是一份非常宝贵的学习资源。 Lucene 3.5.0是Lucene的一个重要版本,它在3.x...

    Lucene时间区间搜索

    Lucene是一款强大的全文搜索引擎库,广泛应用于各种数据检索场景。在C#环境下,利用Lucene进行时间区间搜索是提高数据检索效率和精确度的重要手段。本篇将深入探讨如何在C#中实现Lucene的时间区间查询匹配,以及涉及...

    lucene in action英文版 lucene 3.30包

    《Lucene in Action》是关于Apache Lucene的权威指南,这本书深入浅出地介绍了全文搜索引擎的构建和优化。Lucene是一个高性能、全文本搜索库,它允许开发人员在应用程序中轻松实现复杂的搜索功能。这本书主要面向...

    Annotated Lucene 中文版 Lucene源码剖析

    《Annotated Lucene 中文版 Lucene源码剖析》是一本深入探讨Apache Lucene的书籍,专注于源码解析,帮助读者理解这个强大的全文搜索引擎库的工作原理。Lucene是一款开源的Java库,它提供了高效的文本搜索功能,被...

    Lucene 索引的简单使用

    1. **初始化Directory**:选择存储索引的目录,如FSDirectory(文件系统)、RAMDirectory(内存)等。 2. **创建IndexWriter**:配置IndexWriter实例,指定Directory、Analyzer和其他参数。 3. **创建文档**:定义...

    Lucene示例 BM25相似度计算

    在IT领域,搜索引擎技术是至关重要的,而Lucene作为一个开源全文搜索引擎库,广泛应用于各种文本检索系统中。本文将深入探讨Lucene示例中的BM25相似度计算,旨在帮助初学者理解如何利用Lucene 4.7.1版本构建索引、...

    Lucene简介.介绍

    【Lucene 简介】 Lucene 是一个强大的开源全文搜索库,由 Java 编写,主要用于为应用程序添加全文检索功能。它不是一个完整的全文搜索引擎应用,而是一个工具包,允许开发者将其集成到自己的软件中,以实现高效、...

    lucene对数组做全文检索

    使用lucene对字符串数组在内存建立索引 并检索

    lucene 最新版本所有jar包

    5. **Lucene-Store**: 包含用于存储和读取索引的不同策略,如RAMDirectory、FSDirectory等。 6. **Lucene-Util**: 提供了一系列实用工具类,如BitSet、FieldInfos、IndexInput和IndexOutput等。 7. **Lucene-Codec...

Global site tag (gtag.js) - Google Analytics