Solr:从请求处理程序重新加载核心

时间:2014-04-04 05:56:03

标签: solr lucene

我正在尝试根据参数从我自己的自定义请求处理程序重新加载核心。有什么方法可以做到这一点?

SolrCore中有一个函数SolrCore.reload(SolrCore prev)函数,我试图理解它的作用。参数prev是多少? 以下代码(在handleRequestBody内)不起作用:

String reload_param = params.get(PARAM_RELOAD);
if ((reload_param != null) && reload_param.equals("true")) {
  req.getCore().reload(req.getCore());
  rsp.add("reload", "TRUE");
}

2 个答案:

答案 0 :(得分:1)

核心本身无法重新加载。

管理核心重新加载其他核心。这是因为在内部它创建了核心的另一个实例,并且仍然处理来自旧核心的请求,直到新核心准备好然后它切换到新核心。这是零停机时间。因此,这是在核心本身范围之外完成的。它必须从更广泛的范围内完成,即管理核心。

原始查询是这样的:

http://127.0.0.1:8080/solr/admin/cores?action=RELOAD&core=core1

答案 1 :(得分:1)

是的,核心本身可以自行重装。

核心实际上有创建它的coreContainer对象。通过coreContainer,你可以重新加载。

从您的代码中,您可以这样做:

SolrCore core = req.getCore();
core.getCoreDescriptor().getCoreContainer().reload(core.getName());

为了更加安全,您应该在不同的线程中运行此代码。