gpt4 book ai didi

lucene - LockObtainFailedException 使用 solr 更新 Lucene 搜索索引

转载 作者:行者123 更新时间:2023-12-03 23:32:55 26 4
gpt4 key购买 nike

我在谷歌上搜索了很多。大多数这些问题是由 JVM 崩溃后遗留的锁引起的。这不是我的情况。

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

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

Caused by: org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@/.../lucene-ff783c5d8800fd9722a95494d07d7e37-write.lock



我在 solrconfig.xml 中调整了我的锁定超时
<writeLockTimeout>20000</writeLockTimeout>
<commitLockTimeout>10000</commitLockTimeout>

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

编辑:我所有的更新都通过以下代码(Scala):
val req = new UpdateRequest
req.setAction(AbstractUpdateRequest.ACTION.COMMIT, false, false)
req.add(docs)

val rsp = req.process(solrServer)
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) 小服务程序
2)命令行工具

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

我仍然有点困惑 EmbeddedSolrServer 是否可以工作。有人可以解释一下。我认为它会很好地与 Servlet 进程配合使用,并且它们会在另一个进程写入时等待。

最佳答案

我假设您正在执行以下操作:

writer1.writeSomeStuff();
writer2.writeSomeStuff(); // this one doesn't write

这不起作用的原因是因为除非您关闭它,否则作者会保持打开状态。所以 writer1写入并保持锁定,即使在完成写入之后。 (一旦作者获得了锁,它就永远不会释放,直到它被销毁。) writer2无法获得锁,因为 writer1 仍然持有它,所以它抛出一个 LockObtainFailedException .

如果您想使用两个作家,您需要执行以下操作:
writer1.writeSomeStuff();
writer1.close();
writer2.open();
writer2.writeSomeStuff();
writer2.close();

由于您一次只能打开一个编写器,因此这几乎抵消了使用多个编写器所带来的任何好处。 (实际上一直打开和关闭它们会更糟糕,因为您将不断地付出热身惩罚。)

因此,我怀疑您的潜在问题的答案是:不要使用多个作家。使用具有多个线程访问它的单个编写器( IndexWriter 是线程安全的)。如果您通过 REST 或其他一些 HTTP API 连接到 Solr,则单个 Solr 编写器应该能够处理许多请求。

我不确定您的用例是什么,但另一个可能的答案是查看 Solr's Recommendations用于管理多个索引。特别是热插拔内核的能力可能会引起人们的兴趣。

关于lucene - LockObtainFailedException 使用 solr 更新 Lucene 搜索索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5327978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com