- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 Crawler Controller 来抓取中型网站的所有页面。它随机抓取 2-3 个页面,然后导致 IndexWriter 上的锁定
Directory dir = FSDirectory.open(new File(index));
IndexWriterConfig conf = new IndexWriterConfig(org.apache.lucene.util.Version.LUCENE_41,new StandardAnalyzer(org.apache.lucene.util.Version.LUCENE_41));
writer = new IndexWriter(dir, conf); // line which throws lock exception.
日志:
From: SiteSearch.KCCrawlerController.(80): Lock obtain timed out: NativeFSLock@D:\Websites\ccc\WEB-INF\lucene-index\en\write.lock: 05/08/2014 10:57:55 org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@D:\Websites\ccc\WEB-INF\lucene-index\en\write.lock at org.apache.lucene.store.Lock.obtain(Lock.java:84) at org.apache.lucene.index.IndexWriter.(IndexWriter.java:636) at SiteSearch.KCCrawlerController.(KCCrawlerController.java:80) at org.apache.jsp.monitors.siteSearchIndexer_jsp._jspService(siteSearchIndexer_jsp.java:66) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.tridion.ambientdata.web.AmbientDataServletFilter.doFilter(AmbientDataServletFilter.java:255) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at adminV3.ugc.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82) 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:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 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:298) at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:429) at org.apache.coyote.ajp.AjpAprProtocol$AjpConnectionHandler.process(AjpAprProtocol.java:384) at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665) at java.lang.Thread.run(Unknown Source)
Adding jsp: http://example.com/en/consulting/diagnostics.jsp?crawler=yes
From: SiteSearch.KCCrawler.visit(95): Stream closed: 05/08/2014 10:57:55 java.io.IOException: Stream closed at org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:204) at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:312) at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:342) at SiteSearch.KCCrawler.visit(KCCrawler.java:95) at edu.uci.ics.crawler4j.crawler.WebCrawler.processPage(WebCrawler.java:306) at edu.uci.ics.crawler4j.crawler.WebCrawler.run(WebCrawler.java:189) at java.lang.Thread.run(Unknown Source)
为什么我会收到此异常?任何帮助。
当我第一次运行索引器时,它成功完成并抛出以下异常。如果我对此进行搜索,我会成功获得结果。但是,如果我再次运行索引器,它会抛出上面提到的锁定异常。它还显示我的 Controller 类被调用了两次。
org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet jsp threw exception java.io.IOException: Stream closed at org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:204) at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:115) at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:188) at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:118) at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:77) at org.apache.jsp.monitors.siteSearchIndexer_jsp._jspService(siteSearchIndexer_jsp.java:82) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
最佳答案
引用 Javadocs -
“打开 IndexWriter 会为正在使用的目录创建一个锁定文件。尝试在同一目录上打开另一个 IndexWriter 将导致 LockObtainFailedException。如果使用同一目录上的 IndexReader 从索引中删除文档,也会引发 LockObtainFailedException。”
“IndexWriter 实例是完全线程安全的,这意味着多个线程可以同时调用其任何方法。如果您的应用程序需要外部同步,则不应在 IndexWriter 实例上进行同步,因为这可能会导致死锁;请改用您自己的(非 Lucene)对象。”
https://lucene.apache.org/core/4_1_0/core/org/apache/lucene/index/IndexWriter.html
您是否为正在抓取的每个页面创建新的 IndexWriter 实例?
关于java - new IndexWriter() 处的 LockObtainFailedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25134073/
当文档根据 Java Web 应用程序中的内容上传到不同的索引时,我需要对文档进行索引,其中多个用户可以同时上传多个文档 我使用 Lucene 6.2.1 进行索引 为此我创建了一个无状态 EJB。它
我们有基于 Lucene 的本土搜索服务。我前段时间遇到的一个特殊问题是获取 IndexWriter 上待处理更改的数量。如果挂起的更改计数器为零,则无需提交索引,重新打开 IndexReader、I
我正在开发一个小型 lucene 项目,我必须在其中索引一堆文本文件。我想到目前为止我已经成功创建了索引。代码运行,我得到一堆名为 0_.* fdt/fdx/fnm 等的文件。 我想知道的是,我可以选
我刚刚将我们的 Lucene 实现从 3.1 移植到 4.9,如果没有 forceMerge(1) (曾经是优化的),我似乎仍然无法更新索引中的文档。据我了解,每当我更新文档时,旧文档都会被标记为已删
这是我的问题,我执行 add() 将文档添加到我的索引,然后我关闭它。效果很好! 现在我有一个新需求,每次我在我的数据库中保存一些东西时,我都需要更新我的索引。我无法再次创建 indexWriter,
我有一个程序运行了 2 天,为大约 1.6 亿个文本文件建立了一个 Lucene 索引,程序结束后,我尝试搜索索引,发现索引没有正确建立,indexReader.numDocs() 返回 0 .我检查
我写了一个小循环,将 10,000 个文档添加到 IndexWriter 中,这花了很长时间。 还有其他方法可以索引大量文档吗? 我问是因为当它上线时它必须加载 15,000 条记录。 另一个问题是如
我的索引有以下字段:ID(长整型、已索引、已存储、未分析)、内容(字符串、未索引、未分析、已存储)和标签(字符串、已索引、已分析、已存储)。 需要更新给定 ID 的内容 - 如何使用 IndexW
我在一个目录中有两个大文件(约 200 MB),想在它们上建立索引,所以这是我的代码: public class LuceneUtil { private void indexDoc(In
我想了解 Solr3.5.0 中 IndexWriter 类中的一个函数。任何人都可以让我知道 forceMerge() 函数到底做了什么。它是否优化了分割? 谢谢, 杰亚普拉卡什 最佳答案 是的,f
我正在编写一个使用 Lucene 索引的应用程序,用户必须在其中使用 经常更新或删除索引的文档。 我知道如果有人想从 Lucene 索引中永久删除标记为删除的文档,那么他有两个选择: Indexwri
我正在使用 lucene 6.3.0 创建索引器。它从一个文件夹读取集合并创建另一个文件夹的索引。这工作正常,但我想进行多线程处理,我的意思是,给定 2 个集合(c1 和 c2),运行 2 个线程,每
我正在使用 Crawler Controller 来抓取中型网站的所有页面。它随机抓取 2-3 个页面,然后导致 IndexWriter 上的锁定 Directory dir = FSDirector
我正在使用 lucene.net 在 vs 代码中构建一个 .net 核心 mvc 应用程序,每当我尝试运行这段代码时,它都会抛出一个异常提示(是的,索引路径确实存在) 未处理的异常:System.T
这是代码: Try Dim util As New IndexerUtil() Dim dir As Lucene.Net.Store.Directory = FSDi
对不起,这个简单的问题,但似乎没有任何明显的方法。根据文档,建议保留 IndexWriter 的单个实例。在内存中可以一次又一次地用于更新,而不是为每次更改打开和关闭一个(成本更高)。 但是,文档还指
我正在接手一个项目,所以我还在学习这个。该项目使用 Lucence.NET。我也不知道这个功能是否正确。不管怎样,我正在实例化: var writer = new IndexWriter(direct
我们遇到了 Lucene .Net 抛出 LockObtainFailedException 的锁定问题。这是一个 Multi-Tenancy 站点,每个客户在磁盘上都有自己的物理搜索索引,并使用 I
我的 Lucene Java 实现占用了太多文件。我按照 Lucene Wiki 中有关打开文件太多的说明进行操作,但这只会帮助减缓问题的发生。这是我将对象 (PTicket) 添加到索引的代码: /
我是 Lucene.net 新手,正在努力适应 search code from here这实际上在每个方法中创建了一个新的 Analyzer、IndexSearcher 和 IndexWriter
我是一名优秀的程序员,十分优秀!