我正在编写一个简单的队列,将更新请求发送到Solr核心DataImportHandler
。此处理程序通过对数据库运行查询来更新Solr核心。当一个更新完成后,我想立即发送下一个更新请求。但是,我在检测Solr何时准备接受另一个更新请求时遇到一些问题。以下是我尝试过的内容:
onImportEnd
事件:使用onImportEnd
事件似乎是最明显的方法。我创建了一个自定义事件监听器,它将网络请求发回给我的应用程序,以指示Solr已准备好接受另一个请求。不幸的是,似乎这个事件在 Solr完成导入之后被称为,但之前其状态为idle
。如果我的应用程序在onImportEnd
事件之后立即发出第二个请求,则请求将返回" busy"状态。
postCommit
事件:我创建了一个.exe
来自postCommit
事件。这个可执行文件似乎在导入过程中运行 - Solr没有返回"空闲"状态,直到此可执行文件完成。
postOptimize
事件:永远不会调用此事件。
轮询状态更改:此方法将工作,但这意味着每次更新请求之间会有延迟。我希望这些请求能够尽快执行。
还有另一种方法可以检测Solr何时准备接受另一个更新请求?
答案 0 :(得分:1)
我在类似场景中所做的工作:
当然,如果这些设置不能正常工作,那么您需要将索引操作并行化。
顺便说一下,当你调用 optimize 而不是提交时,会调用postOptimize。