当Solr准备好接受另一个导入请求时,如何实时通知?

时间:2018-03-15 14:19:11

标签: solr dataimporthandler

我正在编写一个简单的队列,将更新请求发送到Solr核心DataImportHandler。此处理程序通过对数据库运行查询来更新Solr核心。当一个更新完成后,我想立即发送下一个更新请求。但是,我在检测Solr何时准备接受另一个更新请求时遇到一些问题。以下是我尝试过的内容:

  • onImportEnd事件:使用onImportEnd事件似乎是最明显的方法。我创建了一个自定义事件监听器,它将网络请求发回给我的应用程序,以指示Solr已准备好接受另一个请求。不幸的是,似乎这个事件在 Solr完成导入之后被称为,但之前其状态为idle。如果我的应用程序在onImportEnd事件之后立即发出第二个请求,则请求将返回" busy"状态。

  • postCommit事件:我创建了一个.exe来自postCommit事件。这个可执行文件似乎在导入过程中运行 - Solr没有返回"空闲"状态,直到此可执行文件完成。

  • postOptimize事件:永远不会调用此事件。

  • 轮询状态更改:此方法工作,但这意味着每次更新请求之间会有延迟。我希望这些请求能够尽快执行。

还有另一种方法可以检测Solr何时准备接受另一个更新请求?

1 个答案:

答案 0 :(得分:1)

我在类似场景中所做的工作:

  1. 添加更多DIH处理程序,您可以拥有任意数量的DIH处理程序,如果需要,每个处理程序都指向它自己的xml配置文件。例如,添加其中的10个
  2. 每次你有一些需要DIH处理程序的数据时,迭代所有这些数据,你会发现一个空闲(如果一切都忙,则添加一些sleep()以获得理智)。这对于大量索引很有帮助。
  3. 当然,如果这些设置不能正常工作,那么您需要将索引操作并行化。

    顺便说一下,当你调用 optimize 而不是提交时,会调用postOptimize。