原文链接:
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();
}
相关推荐
在SpringBoot中,我们需要配置Lucene的初始化。我们将创建一个Bean类,用于实例化IndexWriter和IndexSearcher。 IndexWriter用于创建索引,而IndexSearcher用于搜索索引。 在配置中,我们需要注意以下几点: * ...
而 Luck 是 Lucene 的一个可视化工具,版本为 6.5.0,它为 Lucene 的索引提供了直观的界面,帮助用户更好地理解和调试 Lucene 索引。 Luck 可视化工具的主要特性包括: 1. **索引浏览器**:Luck 允许用户浏览 ...
- 在MyEclipse10中开发Lucene应用时,确保JDK版本与Lucene版本兼容,避免出现运行时问题。 通过上述步骤,你可以在MyEclipse10环境下使用Lucene快速建立和搜索索引,为你的应用程序添加强大的全文检索功能。
- 创建`IndexWriter`实例:使用配置对象和目录实例初始化索引写入器。 **3. 添加文档到索引** 有了`IndexWriter`,我们就可以将文档添加到索引中。这涉及到以下操作: - 创建`Document`对象:为每个要索引的记录...
在 Lucene.NET 中,可以使用 Term(代表一个唯一的文档标识)或者 Query(代表一组文档)作为参数调用 IndexWriter 的 DeleteDocuments 方法来实现。删除操作会标记相应的文档为删除状态,实际清理工作会在下一次 ...
lucene,lucene教程,lucene讲解。 为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store....
Lucene提供了Optimize方法用于合并段以提高性能,而UpdateDocument方法可以替换已存在的文档。 6. **错误处理和资源释放**:在使用完毕后,记得关闭所有打开的流和对象,如IndexWriter、IndexReader、Searcher等,...
1. **初始化Analyzer**: Analyzer负责对输入文本进行分词,根据语言特性进行标准化处理。例如,对于英文,可以使用StandardAnalyzer;对于中文,可以选择IKAnalyzer或其他针对中文优化的Analyzer。 2. **创建...
1. **InitDataSource**: 私有方法,用于初始化数据库连接。通过`JDBCOperatorDAO`类建立与数据库的连接。 ```java private void initDataSource() { db = new JDBCOperatorDAO(); db.createConnection(); } ``` ...
lucene升级了,分词也得... at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1932) at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1906) 用该升级jar,可以解决该问题
通过IndexWriter索引器的构造函数,以及它初始化时调用的一个init方法,可以了解一个IndexWriter索引器的构造最重要的是在init方法中的初始化工作。它主要实现了根据指定的建立索引的方式(重写、追加写入),通过...
为了解决这个问题,开发出了 LukeAll,这是一个专门针对 Lucene 索引的高级图形化界面工具,使得用户可以直观地查看和操作 Lucene 的索引。 LukeAll 支持从 3.5.0 到 4.0.0-ALPHA 的版本,这表明它能够适应 Lucene ...
1. **初始化索引目录**:首先,我们需要创建一个目录来存储索引。这通常通过 `FSDirectory.open()` 方法完成。 2. **创建索引**: - 创建 `IndexWriter` 对象,配置分析器和其他参数。 - 使用 `Document` 对象...
1. **初始化Directory**:选择存储索引的目录,如FSDirectory(文件系统)、RAMDirectory(内存)等。 2. **创建IndexWriter**:配置IndexWriter实例,指定Directory、Analyzer和其他参数。 3. **创建文档**:定义...
1. **初始化索引**: 创建一个Directory对象(如FSDirectory),表示存储索引的物理位置。然后使用IndexWriter实例化,配置Analyzer,开始创建或更新索引。 2. **读取文件**: 逐个读取Word、txt、Html等文件,将每个...
本文将深入探讨Lucene 4.7.0这个官方完整包中的关键知识点,帮助读者理解其核心特性和使用方法。 一、Lucene的基本概念与架构 1. Lucene的核心组件: - 文档(Document):代表要索引的数据源,可以是网页、邮件...
- 初始化SAX处理器实例,并解析XML文档。 - 处理过程中,通过SAX处理器类的方法来捕获文档结构信息。 3. **创建索引** - 基于解析出的信息,使用Lucene的API创建索引。 - 对于每个文档元素,创建对应的`Field`...
- **初始化**: 创建`IndexWriter`对象,配置索引目录和索引参数。 - **文档分析**: 使用`Analyzer`对文档内容进行分词,去除停用词和标点符号,生成词项流。 - **添加文档**: 调用`IndexWriter.addDocument()`...
当你调用`IndexWriter.deleteDocuments(Term term)`或`IndexWriter.deleteDocuments(Query query)`方法时,Lucene并不会立即从硬盘上删除对应的文档,而是将这些待删除的文档ID存储在一个叫做“位向量”(BitSet)的...