【问题标题】:Solr: Reloading core from a request handlerSolr:从请求处理程序重新加载核心
【发布时间】:2014-08-14 21:34:58
【问题描述】:

我正在尝试根据参数从我自己的自定义请求处理程序中重新加载核心。这样做的方法是什么?

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");
}

【问题讨论】:

    标签: solr lucene


    【解决方案1】:

    核心本身无法重新加载。

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

    原始查询是这样的:

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

    【讨论】:

    • 那么,你能告诉我SolrCore.reload(SolrCore prev)的功能和用法吗?
    【解决方案2】:

    是的,核心本身可以自行重新加载。

    core 实际上有创建它的 coreContainer 对象。并且通过 coreContainer 你可以重新加载。

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-07-17
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      相关资源
      最近更新 更多