当 Solr 准备好接受另一个导入请求时,如何实时通知我?
How can I be notified in real-time when Solr is ready to accept another import request?
我正在编写一个简单的队列,用于将更新请求发送到 Solr 核心的 DataImportHandler
。此处理程序通过 运行 查询数据库来更新 Solr 核心。当一个更新完成后,我想立即发送下一个更新请求。但是,我在检测 Solr 何时准备好接受另一个更新请求时遇到了一些问题。这是我尝试过的:
onImportEnd
事件:使用onImportEnd
事件似乎是最明显的方法。我创建了一个自定义事件侦听器,它向我的应用程序发出网络请求,以指示 Solr 已准备好接受另一个请求。不幸的是,这个事件似乎在 after Solr 完成导入但 before 它的状态是 idle
。如果我的应用程序在 onImportEnd
事件后立即发出第二个请求,则请求 return 的状态为 "busy"。
postCommit
事件:我在 postCommit
上创建了一个 运行 的 .exe
事件。此可执行文件似乎 运行 在 导入过程中 - 在该可执行文件完成之前,Solr 不会 return 到 "idle" 状态。
postOptimize
事件: 永远不会调用此事件。
轮询状态变化:这种方法会有效,但这意味着每个更新请求之间会有延迟.我希望尽快执行这些请求。
是否有另一种方法来检测 Solr 何时准备好接受另一个更新请求?
我在类似场景中所做的:
- 添加更多 DIH 处理程序,您可以拥有任意数量的处理程序,如有必要,每个都指向它自己的 xml 配置文件。例如添加 10 个
- 每次你有一些数据需要 DIH 处理程序时,遍历所有这些数据,你会发现一个空闲的(如果所有数据都很忙,请添加一些 sleep() 以保持理智)。这对我进行大量索引很有效。
当然,这需要您将索引操作并行化,否则此设置将无法运行。
顺便说一句,当您调用 optimize 时,将调用 postOptimize,而不是提交。
我正在编写一个简单的队列,用于将更新请求发送到 Solr 核心的 DataImportHandler
。此处理程序通过 运行 查询数据库来更新 Solr 核心。当一个更新完成后,我想立即发送下一个更新请求。但是,我在检测 Solr 何时准备好接受另一个更新请求时遇到了一些问题。这是我尝试过的:
onImportEnd
事件:使用onImportEnd
事件似乎是最明显的方法。我创建了一个自定义事件侦听器,它向我的应用程序发出网络请求,以指示 Solr 已准备好接受另一个请求。不幸的是,这个事件似乎在 after Solr 完成导入但 before 它的状态是idle
。如果我的应用程序在onImportEnd
事件后立即发出第二个请求,则请求 return 的状态为 "busy"。postCommit
事件:我在postCommit
上创建了一个 运行 的.exe
事件。此可执行文件似乎 运行 在 导入过程中 - 在该可执行文件完成之前,Solr 不会 return 到 "idle" 状态。postOptimize
事件: 永远不会调用此事件。轮询状态变化:这种方法会有效,但这意味着每个更新请求之间会有延迟.我希望尽快执行这些请求。
是否有另一种方法来检测 Solr 何时准备好接受另一个更新请求?
我在类似场景中所做的:
- 添加更多 DIH 处理程序,您可以拥有任意数量的处理程序,如有必要,每个都指向它自己的 xml 配置文件。例如添加 10 个
- 每次你有一些数据需要 DIH 处理程序时,遍历所有这些数据,你会发现一个空闲的(如果所有数据都很忙,请添加一些 sleep() 以保持理智)。这对我进行大量索引很有效。
当然,这需要您将索引操作并行化,否则此设置将无法运行。
顺便说一句,当您调用 optimize 时,将调用 postOptimize,而不是提交。