今天一哥们在做一个程序的时候使用了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,在系统启动时把索引读到内存,查询时就直接使用。
本来是一个小问题,可是好长时间才解决,看来是经验不足,还需要锻炼!
分享到:
相关推荐
第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。 public void add(Query query, BooleanClause.Occur occur) BooleanClause用于表示布尔查询子句关系的类,包括: BooleanClause.Occur.MUST,...
《教你运用Lucene算法》 Lucene是一款强大的全文搜索引擎库,它提供了丰富的信息检索功能,包括文本分析、索引构建、搜索以及结果排名等。在深入理解Lucene的工作原理时,我们首先要关注的是其核心算法。 一、单个...
5. **内存索引与磁盘索引**: `RAMDirectory` 用于内存中的索引,而 `FSDirectory` 则用于磁盘上的索引,两者可以根据需求灵活选择。 **Lucene 3.0 API 更新与改进** 1. **SegmentMerger 改进**: Lucene 3.0 中,`...
Lucene是Apache软件基金会的一个开放源代码项目,它是一个全文搜索引擎库,主要用Java编写,但也有其他语言的版本。Lucene提供了高级的文本分析、索引和搜索功能,是构建高效、可扩展的信息检索应用的基础。在Java的...
lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0
import org.apache.lucene.store.RAMDirectory; public class LuceneIndexExample { public static void main(String[] args) throws Exception { // 创建内存目录 Directory directory = new RAMDirectory(); ...
5. **跨平台**:Lucene用Java编写,因此可以运行在任何Java兼容平台上,具有良好的跨平台性。 在Lucene 4.7.0版本中,主要改进和新增功能包括: - **更新的分词器**:引入了新的分词器,如ICU分词器,增强了对多种...
import org.apache.lucene.store.RAMDirectory; public class SimpleLuceneDemo { public static void main(String[] args) throws Exception { // 创建目录对象 Directory directory = new RAMDirectory(); /...
### Lucene对XML文档建立索引的技术解析与实践 #### 一、引言 随着互联网技术的迅猛发展,非结构化数据(如XML文档)在企业和组织中的应用日益广泛。如何高效地处理这些非结构化的数据,特别是进行快速检索成为了一...
Directory则用来保存索引,可以选择不同的实现,如内存中的RAMDirectory或磁盘上的FSDirectory。IndexWriter是构建和管理索引的关键对象。 接下来,你需要创建一个索引器类,该类使用Spring的ApplicationContext...
本压缩包包含的是Lucene 3.5.0版本的全部源码,对于想要深入理解Lucene工作原理、进行二次开发或者进行搜索引擎相关研究的开发者来说,是一份非常宝贵的学习资源。 Lucene 3.5.0是Lucene的一个重要版本,它在3.x...
Lucene是一款强大的全文搜索引擎库,广泛应用于各种数据检索场景。在C#环境下,利用Lucene进行时间区间搜索是提高数据检索效率和精确度的重要手段。本篇将深入探讨如何在C#中实现Lucene的时间区间查询匹配,以及涉及...
《Lucene in Action》是关于Apache Lucene的权威指南,这本书深入浅出地介绍了全文搜索引擎的构建和优化。Lucene是一个高性能、全文本搜索库,它允许开发人员在应用程序中轻松实现复杂的搜索功能。这本书主要面向...
《Annotated Lucene 中文版 Lucene源码剖析》是一本深入探讨Apache Lucene的书籍,专注于源码解析,帮助读者理解这个强大的全文搜索引擎库的工作原理。Lucene是一款开源的Java库,它提供了高效的文本搜索功能,被...
1. **初始化Directory**:选择存储索引的目录,如FSDirectory(文件系统)、RAMDirectory(内存)等。 2. **创建IndexWriter**:配置IndexWriter实例,指定Directory、Analyzer和其他参数。 3. **创建文档**:定义...
在IT领域,搜索引擎技术是至关重要的,而Lucene作为一个开源全文搜索引擎库,广泛应用于各种文本检索系统中。本文将深入探讨Lucene示例中的BM25相似度计算,旨在帮助初学者理解如何利用Lucene 4.7.1版本构建索引、...
【Lucene 简介】 Lucene 是一个强大的开源全文搜索库,由 Java 编写,主要用于为应用程序添加全文检索功能。它不是一个完整的全文搜索引擎应用,而是一个工具包,允许开发者将其集成到自己的软件中,以实现高效、...
使用lucene对字符串数组在内存建立索引 并检索
5. **Lucene-Store**: 包含用于存储和读取索引的不同策略,如RAMDirectory、FSDirectory等。 6. **Lucene-Util**: 提供了一系列实用工具类,如BitSet、FieldInfos、IndexInput和IndexOutput等。 7. **Lucene-Codec...