相关疑难解决方法(0)

LockObtainFailedException使用solr更新Lucene搜索索引

我已经google了很多.大多数问题都是由JVM崩溃后留下的锁引起的.这不是我的情况.

我有一个包含多个读者和作者的索引.我正在尝试进行批量索引更新(删除和添加 - 这就是lucene更新的方式).我正在使用solr的嵌入式服务器(org.apache.solr.client.solrj.embedded.EmbeddedSolrServer).其他编写者正在使用远程非流式服务器(org.apache.solr.client.solrj.impl.CommonsHttpSolrServer).

我启动了这个大规模的更新,它运行了一段时间,然后死了一个

引起:org.apache.lucene.store.LockObtainFailedException:Lock获取超时:NativeFSLock @/.../lucene-ff783c5d8800fd9722a95494d07d7e37-write.lock

我在solrconfig.xml中调整了锁定超时

<writeLockTimeout>20000</writeLockTimeout>
<commitLockTimeout>10000</commitLockTimeout>
Run Code Online (Sandbox Code Playgroud)

我即将开始阅读lucene代码来解决这个问题.任何帮助,所以我不必这样做会很棒!

编辑:我的所有更新都通过以下代码(Scala):

val req = new UpdateRequest
req.setAction(AbstractUpdateRequest.ACTION.COMMIT, false, false)
req.add(docs)

val rsp = req.process(solrServer)
Run Code Online (Sandbox Code Playgroud)

solrServer 是org.apache.solr.client.solrj.impl.CommonsHttpSolrServer,org.apache.solr.client.solrj.impl.StreamingUpdateSolrServer或org.apache.solr.client.solrj.embedded.EmbeddedSolrServer的实例.

另一个编辑:我停止使用EmbeddedSolrServer,现在可以使用了.我有两个单独的进程来更新solr搜索索引:

1)Servlet 2)命令行工具

命令行工具使用的是EmbeddedSolrServer,它最终会因LockObtainFailedException而崩溃.当我开始使用StreamingUpdateSolrServer时,问题就消失了.

我仍然有点困惑,EmbeddedSolrServer可以工作.有人可以解释一下吗.我认为它会对Servlet进程起到很好的作用,并且在另一个写入时它们会等待.

lucene solr

13
推荐指数
2
解决办法
3万
查看次数

标签 统计

lucene ×1

solr ×1