Failed to check if index is compound; nested excep

本文记录了一次解决Lucene索引过程中遇到的锁文件问题,详细解释了两种常见问题的原因及解决办法,并分享了一个简单的解决方案。

正在重建索引...
错误Failed to check if index is compound; nested exception is java.io.IOException: Lock obtain timed out: Lock@D:\Tomcat 6.0\temp\lucene-dd060d33087287190699cf3f47a115fc-commit.lock

org.compass.core.engine.SearchEngineException: Failed to check if index is compound; nested exception is java.io.IOException: Lock obtain timed out: Lock@D:\Tomcat 6.0\temp\lucene-dd060d33087287190699cf3f47a115fc-commit.lock
java.io.IOException: Lock obtain timed out: Lock@D:\Tomcat 6.0\temp\lucene-dd060d33087287190699cf3f47a115fc-commit.lock
at org.apache.lucene.store.Lock.obtain(Lock.java:56)
at org.apache.lucene.store.Lock$With.run(Lock.java:98)
at org.apache.lucene.index.LuceneUtils.isCompound(LuceneUtils.java:211)
at org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager.isIndexCompound(DefaultLuceneSearchEngineIndexManager.java:422)
at org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager.verifyIndex(DefaultLuceneSearchEngineIndexManager.java:90)
at org.compass.core.impl.DefaultCompass$TransactionalSearchEngineIndexManager$2.doInCompass(DefaultCompass.java:293)
at org.compass.core.CompassTemplate.execute(CompassTemplate.java:134)
at org.compass.core.CompassTemplate.execute(CompassTemplate.java:117)
at org.compass.core.impl.DefaultCompass$TransactionalSearchEngineIndexManager.verifyIndex(DefaultCompass.java:291)
at org.compass.core.lucene.engine.manager.ScheduledLuceneSearchEngineIndexManager.verifyIndex(ScheduledLuceneSearchEngineIndexManager.java:98)
at org.compass.core.impl.DefaultCompass.(DefaultCompass.java:147)
at org.compass.core.impl.DefaultCompass.(DefaultCompass.java:102)
at org.compass.core.impl.DefaultCompass.(DefaultCompass.java:95)
at org.compass.core.config.CompassConfiguration.buildCompass(CompassConfiguration.java:191)
at org.mypackage.service.imp.SearchServiceImp.(SearchServiceImp.java:70)
at cn.allobject.struts.action.RebuildSearchIndexAction.index_list_of_books(RebuildSearchIndexAction.java:96)
at cn.allobject.struts.action.RebuildSearchIndexAction.execute(RebuildSearchIndexAction.java:73)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:164)
at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141)
at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:417)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at cn.java1995.filter.GZipFilter.doFilter(GZipFilter.java:41)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at cn.allobject.servlet.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:34)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Unknown Source)




最近网站出现了这个问题,,,好郁闷。这是LUCENE的问题。
自己不怎么懂啊。。。只得GOOGLE下啦!
[quote]出现以上异常主要有两种原因:
1.系统正在写索引未完成之前,应用程序关闭
解决方法:删除提示的lock文件后重启应用(最好在应用中捕捉到,自动删除)
2.系统中有多个线程或程序在抢用索引
解决方法:增加或改善等待队列机制作,或者出现此错误时先解锁 [/quote]

哎。。。怎么会出现这个问题。。。。看来没希望了。如果要解决这个问题又得叫空间提供商重启服务,那边又会是一堆废话。。。

嘿嘿,自己写个JSP页面,删除了那文件试下了。哈。。。删好,果然,成功了。网站搜索又能使用。哎。。得学习下LUCENE啊。。。不能只知道WHAT不知道HOW啊。
### ### OLE复合文档错误解决方案 在处理Excel文件时,如果尝试打开一个OLE复合文档(如旧版本的.xls文件)或加密的.xlsx文件,可能会遇到错误提示:`can not open the package, Package is an OLE compound document. if this is an encrypted package, please supply the password`。这种情况通常发生在使用现代的Office Open XML(.xlsx)格式处理库(如`EPPlus`或`OpenXML SDK`)来读取不兼容的文件格式时。 #### 1. 文件格式不兼容 OLE复合文档是旧版Excel(.xls)使用的二进制格式,而现代库如`EPPlus`和`DocumentFormat.OpenXml`仅支持基于ZIP包的Office Open XML格式(.xlsx)。如果尝试用这些库打开.xls文件,就会触发此错误[^1]。解决方案是使用兼容旧格式的库,例如`Microsoft.Office.Interop.Excel`或`NPOI`来读取.xls文件。 #### 2. 加密文档需要密码 如果文件是受密码保护的.xlsx文件,即使使用支持Office Open XML格式的库,也需要在打开时提供正确的密码。否则,库无法解析文件内容并抛出上述错误。可以在代码中指定密码参数来处理加密文件,例如在`EPPlus`中: ```csharp using (var package = new ExcelPackage(new FileInfo("encrypted.xlsx"), "your_password")) { // 处理Excel文件 } ``` #### 3. 检查文件扩展名与实际内容是否一致 有时文件扩展名被错误更改(例如将.xls文件重命名为.xlsx),也会导致库误判文件结构并报错。应确保文件扩展名与实际内容格式一致。可以使用工具如`File`命令(Linux)或`PowerShell`检查文件真实类型: ```powershell Get-Item "path\to\file.xlsx" | Get-FileHash -Algorithm SHA256 ``` #### 4. 使用正确的库处理不同格式 对于不同格式的Excel文件,应使用对应的库进行处理: - **.xls(OLE复合文档)**:使用`NPOI`或`Interop.Excel`。 - **.xlsx(Office Open XML)**:使用`EPPlus`、`OpenXML SDK`或`ClosedXML`。 - **加密.xlsx**:确保提供密码后使用支持加密的库(如`EPPlus` 5+)[^2]。 #### 5. 避免直接操作底层ZIP包 某些开发者尝试手动解压.xlsx文件进行操作,但如果文件结构损坏或未正确封装,也可能导致“OLE复合文档”错误。应使用封装好的库来处理底层结构,避免手动修改ZIP内容。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值