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



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

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

  • postCommit事件:我创建了一个在postCommit事件上运行的.exe。 此可执行文件似乎导入过程中运行 - 在此可执行文件完成之前,Solr 不会返回到"空闲"状态。

  • postOptimize事件:从不调用此事件。

  • 轮询状态更改:此方法有效,但这意味着每个更新请求之间存在延迟。 我希望尽快执行这些请求。

有没有其他方法可以检测Solr何时准备好接受另一个更新请求?

我在类似情况下做了什么:

  1. 添加更多 DIH 处理程序,您可以拥有任意数量的处理程序,如有必要,每个处理程序都指向它自己的 XML 配置文件。例如,添加其中的 10
  2. 每次您有一些需要 DIH 处理程序的数据时,遍历所有这些数据,您会发现一个空闲(如果所有人都忙,请添加一些 sleep() 以确保理智)。这对于大容量索引非常有效。

当然,这需要索引操作是可并行化的,如果不是,则此设置将不起作用。

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

最新更新