org.apache.lucene.store.LockObtainFailedException

本文解决Lucene组织中出现的存储文件锁定失败问题,建议在服务器启动时检查并删除现有存储文件,避免因同时尝试创建多次而引发的错误。
Lucence
org.apache.lucene.store.LockObtainFailedException
org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: SimpleFSLock@F:\...\write.lock
at org.apache.lucene.store.Lock.obtain(Lock.java:85)
at org.apache.lucene.index.IndexWriter.init(IndexWriter.java:1054)
at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:670)
解决方案:
删除存储文件,重新建一个。
(服务器启动时)有可能同时建两次,还没来得及建成就报错,让它建一次就行了。
[2025-08-27T04:10:31,691][INFO ][o.e.p.PluginsService ] [node-1] no plugins loaded [2025-08-27T04:10:37,953][ERROR][o.e.b.Elasticsearch ] [node-1] fatal exception while booting Elasticsearch java.lang.IllegalStateException: failed to obtain node locks, tried [/usr/local/elasticsearch-8.4.0/data]; maybe these locations are not writable or multiple nodes were started on the same data path? at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:285) ~[elasticsearch-8.4.0.jar:?] at org.elasticsearch.node.Node.<init>(Node.java:456) ~[elasticsearch-8.4.0.jar:?] at org.elasticsearch.node.Node.<init>(Node.java:311) ~[elasticsearch-8.4.0.jar:?] at org.elasticsearch.bootstrap.Elasticsearch$2.<init>(Elasticsearch.java:214) ~[elasticsearch-8.4.0.jar:?] at org.elasticsearch.bootstrap.Elasticsearch.initPhase3(Elasticsearch.java:214) ~[elasticsearch-8.4.0.jar:?] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:67) ~[elasticsearch-8.4.0.jar:?] Caused by: org.apache.lucene.store.LockObtainFailedException: Lock held by another program: /usr/local/elasticsearch-8.4.0/data/node.lock at org.apache.lucene.store.NativeFSLockFactory.obtainFSLock(NativeFSLockFactory.java:117) ~[lucene-core-9.3.0.jar:?] at org.apache.lucene.store.FSLockFactory.obtainLock(FSLockFactory.java:43) ~[lucene-core-9.3.0.jar:?] at org.apache.lucene.store.BaseDirectory.obtainLock(BaseDirectory.java:44) ~[lucene-core-9.3.0.jar:?] at org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:223) ~[elasticsearch-8.4.0.jar:?] at org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:198) ~[elasticsearch-8.4.0.jar:?] at org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:277) ~[elasticsearch-8.4.0.jar:?] ... 5 more
最新发布
08-27
package com.boe.cim.teacher.luence; import java.nio.file.Paths; import java.util.List; import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.IntField; import org.apache.lucene.document.StringField; import org.apache.lucene.document.TextField; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.Term; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import com.boe.cim.teacher.pojo.RequirementInfo; /** * @author hyh * @description 创建文档索引 */ public class LuceneIndexRequirement { private Directory dir; /** *实例化indexerWriter * @return * @throws Exception */ private IndexWriter getWriter()throws Exception{ //中文分词器 SmartChineseAnalyzer analyzer=new SmartChineseAnalyzer(); IndexWriterConfig iwc=new IndexWriterConfig(analyzer); IndexWriter writer=new IndexWriter(dir, iwc); return writer; } /** * 获取indexreDir * @param indexreDir * @throws Exception */ public void index(String indexreDir,List<RequirementInfo> listRequirement)throws Exception{ dir=FSDirectory.open(Paths.get(indexreDir)); IndexWriter writer=getWriter(); for(int i=0;i<listRequirement.size();i++){ Document doc=new Document(); RequirementInfo requirement = listRequirement.get(i); //StringField 只索引不分词 doc.add(new StringField("id",String.valueOf(requirement.getId()), Field.Store.YES)); doc.add(new StringField("requirement", requirement.getRequirement(), Field.Store.YES)); doc.add(new StringField("department",requirement.getDepartment(),Field.Store.YES)); doc.add(new StringField("liaisonman", requirement.getLiaisonman(), Field.Store.YES)); doc.add(new StringField("requirementtype", Integer.toString(requirement.getRequirementtype()), Field.Store.YES)); doc.add(new TextField("requirementbackground", requirement.getRequirementbackground(), Field.Store.YES)); doc.add(new TextField("requirementcontents", requirement.getRequirementcontents(), Field.Store.YES)); // writer.deleteDocuments(new Term("id",String.valueOf(teacher.getId()))); writer.updateDocument(new Term("id",String.valueOf(requirement.getId())), doc); } writer.close(); } } 上述代码是否正确
08-19
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值