`

lucene IndexWriter addDocuments bug

    博客分类:
  • JAVA
 
阅读更多

               为了理论上的批量处理快点,在lucene中我使用了 IndexWriter  addDocuments ,对比这个接口还有个addDocument,理所当然的认为2者的差别主要在于一个foreach了,不过大体处理过程也的确如此,殊不知后来的各种诡异hang都因这个假设,发现我本地测试跑,部署web方式跑,测试环境web方式跑,每次都因为不同的批量因子和RAMBuffer而hang住,我可不想穷举各种可用的因子,故觉得存在bug,看Lucene的bug列表,果然发现了这个问题,见

TestNRTThreads hangs in nightly 3.x builds

https://issues.apache.org/jira/browse/LUCENE-3339

               

                      这个bug还没修复掉,希望在3.4能修复,针对这个bug我想大量的对addDocument的调用应该是没问题,故在我的代码里开始进行foreach调用(之前传递个list即可),写完了开始部署测试,发现尽然整体索引时间降低了2倍多,好吧之前应该做下对比性测试的,批量的也许未必效果要比foreach的好,还是要看具体实现了。

 

                    在addDocument与 addDocuments中都会有对锁的操作,之前hang住都是在等待一个writer锁,批量的貌似会锁更长的时间,如果有锁与多线程存在的情况下,多线程短锁的效果应该比长锁好很多,把锁的粒度控制在最小,毕竟这个牵扯太多还容易死锁。

分享到:
评论

相关推荐

    lucene,lucene教程,lucene讲解

    org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store.Directory public abstract class Analyzer org.apache.lucene.analysis.Analyzer public final class ...

    lucene.net实例

    在 Lucene.NET 中,可以使用 Term(代表一个唯一的文档标识)或者 Query(代表一组文档)作为参数调用 IndexWriter 的 DeleteDocuments 方法来实现。删除操作会标记相应的文档为删除状态,实际清理工作会在下一次 ...

    与lucene3.0兼容的庖丁jar包

    lucene升级了,分词也得... at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1932) at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1906) 用该升级jar,可以解决该问题

    Lucene索引器实例

    在Lucene中,我们首先需要创建一个`IndexWriter`实例来管理索引的写入操作。这通常包括以下几个步骤: - 初始化配置:设置目录(Directory)、分析器(Analyzer)、索引写入参数等。 - 创建`IndexWriterConfig`对象...

    lucene5.X与lucene3.60的版本差异

    8. Lucene-4246:`IndexWriter.close()`现在总是在抛出异常时关闭,除非通过`IndexWriterConfig.setCommitOnClose(true)`显式设置。 9. Lucene-5608, Lucene-5565:空间前缀树和单元API进行了重构,不再使用字符串...

    Lucene3.5源码jar包

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

    Lucene 4.1 最新版本 修复诸多BUG

    《深入解析Lucene 4.1:修复与优化的里程碑》 Apache Lucene是一个高性能、全文本搜索引擎库,被广泛应用于各种搜索应用中。在2012年发布的Lucene 4.1版本,标志着该项目在功能完善和性能提升上迈出了重要的一步。...

    详解SpringBoot+Lucene案例介绍

    SpringBoot与Lucene集成案例详解 本文将详细介绍如何将SpringBoot与Lucene集成,以实现站内搜索系统。 Lucene是一个高性能的全文检索引擎,它可以帮助我们快速地检索大量的文本数据。 一、案例介绍 在本案例中,...

    lucene for java 简单demo

    import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.IndexSearcher; ...

    Lucene3.0创建索引

    System.out.println("Number of documents indexed: " + indexWriter.numDocs()); // 关闭IndexWriter indexWriter.close(); ``` #### 四、代码解析 1. **初始化目录**: - 使用`SimpleFSDirectory`类来指定索引...

    lucene 2.0 api以及lucene 3.0 api

    1. **索引构建**: Lucene 2.0 提供了 `IndexWriter` 类,用于创建和更新索引。开发者可以使用 `Document` 类来封装待索引的数据,然后通过 `addDocument()` 方法添加到索引中。 2. **查询构造**: 通过 `QueryParser...

    Lucene 索引的简单使用

    3. **创建文档**:定义Document对象,添加Field,如`doc.add(new TextField("content", "文本内容", Store.YES))`。 4. **添加文档到索引**:使用`indexWriter.addDocument(doc)`将文档写入索引。 5. **关闭...

    Lucene初探,一个初级的LuceneDemo

    doc.add(new TextField("content", "这是一个关于Lucene的初级示例", Field.Store.YES)); ``` 4. **索引文档**:使用`addDocument()`方法将文档添加到索引。 ```java indexWriter.addDocument(doc); ``` 5. **...

    不错的lucene资料

    ### Lucene概述与基本应用 #### 一、Lucene简介 **Lucene** 是一个开源的信息检索库,它提供了一套高效且灵活的全文检索功能。Lucene 的目标是帮助开发者轻松地为应用程序添加索引和搜索功能。尽管 Lucene 本身并...

    lucene全文检索案例源码

    doc.add(new TextField("content", "文档内容", Field.Store.YES)); indexWriter.addDocument(doc); indexWriter.commit(); indexWriter.close(); ``` 2. 执行搜索:在搜索阶段,我们创建一个IndexSearcher对象,...

    lucene 4.7.2 Demo

    《Lucene 4.7.2 Demo:Java全文搜索引擎的核心技术探索》 Lucene,作为Apache软件基金会的一个开源项目,是Java平台上的一个全文搜索引擎库。它的主要功能是提供高效、可扩展的文本检索和分析能力。在4.7.2这个版本...

    经典的lucene实例代码及详细解析以及lucene结构流程介绍

    最后,我们使用`IndexWriter`类将索引写入到磁盘上。 Lucene索引结构 Lucene索引结构主要由三个部分组成:索引文件、词典和倒排索引。索引文件是Lucene索引的物理存储单元,词典是词项的集合,倒排索引是词项到...

    Annotated Lucene 中文版 Lucene源码剖析

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

    lucene全文搜素实例 java lucene 实例

    **Lucene 全文搜索引擎实例:Java Lucene 实例** Lucene 是 Apache 软件基金会的一个开源项目,它提供了一个高性能、可扩展的信息检索库。这个实例将深入讲解如何在 Java 中使用 Lucene 来创建索引并执行各种搜索...

    Lucene之删除索引

    当你调用`IndexWriter.deleteDocuments(Term term)`或`IndexWriter.deleteDocuments(Query query)`方法时,Lucene并不会立即从硬盘上删除对应的文档,而是将这些待删除的文档ID存储在一个叫做“位向量”(BitSet)的...

Global site tag (gtag.js) - Google Analytics