2014-04-04 89 views
0

我想從我自己的自定義請求處理程序基於參數重新加載核心。有什麼辦法呢?Solr:從請求處理程序重新加載核心

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

回答

1

核心本身不能自動重新加載。

這是重新加載其他核心的管理核心。這是因爲它在內部創建了另一個核心實例,並且仍然服務於舊核心的請求,直到新核心準備就緒,然後切換到新核心。這是爲了獲得零停機時間。所以,這是在覈心本身的範圍之外完成的。它必須從管理核心這個更廣泛的範圍來完成。

原始查詢是這樣的:

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

那麼,你能告訴我SolrCore.reload(SolrCore prev)的功能和用法嗎? – krips89

1

是的,有辦法的核心本身可以自動重新加載。

核心實際上有創建它的coreContainer對象。通過coreContainer,你可以重新加載。

從你的代碼,你可以這樣做:

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

要在安全方面,你應該運行在不同的線程的代碼。