`

Lucene的IndexWriter初始化时的LockObtainFailedException的解决方法

 
阅读更多

原文链接:

http://www.javaarch.net/jiagoushi/904.htm

Lucene的IndexWriter初始化时的LockObtainFailedException的解决方法

 

本网站使用了lucene来支持搜索功能,然后定时重建索引,但是最近日志里面出现了下面的异常。

 

这个异常是因为lucene进入到索引目录中,发现里面就是一个write.lock。而IndexWriter的构造函数在试图获取另外一个IndexWriter已经加锁的索引目录时就会抛出一个LockObtainFailedException。

 

 

[ERROR] 2013-06-28 14:00:01,009 [org.springweb.lucene.DataIndex.index] - DataIndex index got error Lock obtain timed out: NativeFSLo

ck@/root/data/write.lock

org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@/root/data/write.lock

        at org.apache.lucene.store.Lock.obtain(Lock.java:84)

        at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:1098)

        at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:926)

        at org.springweb.lucene.DataIndex.index(DataIndex.java:36)

 

之前的代码是这样的

 

indexwrite.commit();

indexwrite.close();

 

在close方法里面也会调用unlock方法,就是删除write.lock的锁文件,但是之前在索引过程中抛出了异常,导致这个锁没有被释放,下次再建索引的时候就抛异常了。

 

所以要么在indexwrite构造方法前调用,要么保证indexwrite.close();能被调用。

 

 

// indexwrite.getDirectory().close();

if (IndexWriter.isLocked(directory)) {

IndexWriter.unlock(directory);

}

 

unlock就是删除public static final String WRITE_LOCK_NAME = "write.lock";这个文件

 

public static void unlock(Directory directory) throws IOException {

directory.makeLock(IndexWriter.WRITE_LOCK_NAME).release();

}

3
1
分享到:
评论
2 楼 tt5753 2015-12-14  
谢啦........
1 楼 liangcoder 2013-06-29  
good job~

建议:是不是在indexWriter.close() 时,如果发生异常就unlock下,不是更优雅?

相关推荐

    详解SpringBoot+Lucene案例介绍

    在SpringBoot中,我们需要配置Lucene的初始化。我们将创建一个Bean类,用于实例化IndexWriter和IndexSearcher。 IndexWriter用于创建索引,而IndexSearcher用于搜索索引。 在配置中,我们需要注意以下几点: * ...

    lucene可视化工具 Luck-6.5.0

    而 Luck 是 Lucene 的一个可视化工具,版本为 6.5.0,它为 Lucene 的索引提供了直观的界面,帮助用户更好地理解和调试 Lucene 索引。 Luck 可视化工具的主要特性包括: 1. **索引浏览器**:Luck 允许用户浏览 ...

    最简单的Lucene建立、搜索索引的方法

    - 在MyEclipse10中开发Lucene应用时,确保JDK版本与Lucene版本兼容,避免出现运行时问题。 通过上述步骤,你可以在MyEclipse10环境下使用Lucene快速建立和搜索索引,为你的应用程序添加强大的全文检索功能。

    Lucene索引器实例

    - 创建`IndexWriter`实例:使用配置对象和目录实例初始化索引写入器。 **3. 添加文档到索引** 有了`IndexWriter`,我们就可以将文档添加到索引中。这涉及到以下操作: - 创建`Document`对象:为每个要索引的记录...

    lucene.net实例

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

    lucene,lucene教程,lucene讲解

    lucene,lucene教程,lucene讲解。 为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store....

    lucene5.3.1增删改查

    1. **初始化Analyzer**: Analyzer负责对输入文本进行分词,根据语言特性进行标准化处理。例如,对于英文,可以使用StandardAnalyzer;对于中文,可以选择IKAnalyzer或其他针对中文优化的Analyzer。 2. **创建...

    使用lucene进行简单的开发

    1. **InitDataSource**: 私有方法,用于初始化数据库连接。通过`JDBCOperatorDAO`类建立与数据库的连接。 ```java private void initDataSource() { db = new JDBCOperatorDAO(); db.createConnection(); } ``` ...

    与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,可以解决该问题

    基于JAVA的搜索引擎 lucene-2.2.0

    通过IndexWriter索引器的构造函数,以及它初始化时调用的一个init方法,可以了解一个IndexWriter索引器的构造最重要的是在init方法中的初始化工作。它主要实现了根据指定的建立索引的方式(重写、追加写入),通过...

    Lucene 索引图形化界面工具 LukeAll 3.5~4.0

    为了解决这个问题,开发出了 LukeAll,这是一个专门针对 Lucene 索引的高级图形化界面工具,使得用户可以直观地查看和操作 Lucene 的索引。 LukeAll 支持从 3.5.0 到 4.0.0-ALPHA 的版本,这表明它能够适应 Lucene ...

    lucene全文搜素实例 java lucene 实例

    1. **初始化索引目录**:首先,我们需要创建一个目录来存储索引。这通常通过 `FSDirectory.open()` 方法完成。 2. **创建索引**: - 创建 `IndexWriter` 对象,配置分析器和其他参数。 - 使用 `Document` 对象...

    Lucene 索引的简单使用

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

    基于Lucene的Lucene

    1. **初始化索引**: 创建一个Directory对象(如FSDirectory),表示存储索引的物理位置。然后使用IndexWriter实例化,配置Analyzer,开始创建或更新索引。 2. **读取文件**: 逐个读取Word、txt、Html等文件,将每个...

    C#调用Lucene方法-实现快速搜索

    Lucene提供了Optimize方法用于合并段以提高性能,而UpdateDocument方法可以替换已存在的文档。 6. **错误处理和资源释放**:在使用完毕后,记得关闭所有打开的流和对象,如IndexWriter、IndexReader、Searcher等,...

    lucene4.7官方完整包

    本文将深入探讨Lucene 4.7.0这个官方完整包中的关键知识点,帮助读者理解其核心特性和使用方法。 一、Lucene的基本概念与架构 1. Lucene的核心组件: - 文档(Document):代表要索引的数据源,可以是网页、邮件...

    lucene 对 xml建立索引

    - 初始化SAX处理器实例,并解析XML文档。 - 处理过程中,通过SAX处理器类的方法来捕获文档结构信息。 3. **创建索引** - 基于解析出的信息,使用Lucene的API创建索引。 - 对于每个文档元素,创建对应的`Field`...

    Lucene建立索引

    - **初始化**: 创建`IndexWriter`对象,配置索引目录和索引参数。 - **文档分析**: 使用`Analyzer`对文档内容进行分词,去除停用词和标点符号,生成词项流。 - **添加文档**: 调用`IndexWriter.addDocument()`...

    Lucene 使用正则表达式

    这段代码初始化了一个`IndexWriter`,用于创建新的索引。`new StandardAnalyzer()`表示使用标准分析器对文本进行分词处理。 2. **文档添加**: ```java Document doc1 = new Document(); Document doc2 = new ...

Global site tag (gtag.js) - Google Analytics