簡體   English   中英

為什么我不能在JBoss的Solr中實例化DataImportHandler?

[英]Why can't I instantiate DataImportHandler in Solr on JBoss?

我正在嘗試在JBoss 5.1上設置Solr 3.5.0。 一切正常。 我將war復制到deploy dir中,將dist和contrib目錄中的所有依賴項都復制到lib(或更早的deploy)目錄中。

我可以啟動服務器,一切正常,但是每當我想激活DataImportHandler來索引數據庫中的數據時,都會出現錯誤。

基本上,我要做的就是復制是從example / example-DIH / solr / db復制一個核心(或者整個示例,都沒關系),我在solr.xml中注冊了核心,並且在啟動時出現錯誤:

15:17:10,707 SEVERE [RequestHandlers] org.apache.solr.common.SolrException: Error Instantiating Request Handler, org.apache.solr.handler.dataimport.DataImportHandler is not a org.apache.solr.request.SolrRequestHandler
at org.apache.solr.core.SolrCore.createInstance(SolrCore.java:427)
at org.apache.solr.core.SolrCore.createRequestHandler(SolrCore.java:461)
at org.apache.solr.core.RequestHandlers.initHandlersFromConfig(RequestHandlers.java:157)

我很確定我的請求處理程序定義正確,但是請確保:

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
  <str name="config">dataimport.xml</str>
</lst>

據我所知,此錯誤可能是由DataImportHandler和SolrRequestHandler可能持有不同的類加載器引起的。

在示例中,只要我從start.jar應用程序啟動Solr(我認為它會啟動Jetty服務器),就可以正常工作。

我的問題是:這是否真的是由於類加載器問題或其他原因引起的? 而且,更重要的是:我該如何解決?

這是一個類加載器問題,根據Lucene Developer Mailing List上的這篇文章,您需要執行以下操作:

確保dataimport罐不在類路徑中,也不由其他類加載器加載,而是從solrconfig.xml中指定的路徑加載。 這將確保數據導入類由相同的類加載器加載。

請參閱主題以獲取更多詳細信息。

Paige Cook的答案是正確的,但我想補充一些細節。 我認為您將dataimporthandler jar放入應用程序服務器的公共lib目錄中,而所有solr jar都位於solr.warWEB-INF/lib中。 這意味着您正在從其他類加載器加載dataimporthandler jar。 您可以通過將solr庫放在其他lib(外部)目錄中來解決此問題。 然后,在您的solr.xml您應該通過sharedLib屬性引用該lib文件夾。 像這樣:

<?xml version="1.0" encoding="UTF-8" ?>
<solr persistent="false" sharedLib="lib">
    <cores adminPath="/admin/cores">
        <core name="core1" instanceDir="core1" />
    </cores>
</solr>

這樣,Solr Web應用程序將通過其特定的類加載器從該外部位置加載jar。

正如Paige Cook所說的,這是一個類加載器問題,您應該將dataimport jar添加到Solr類加載器使用的路徑中。 為了定義這樣的lib路徑,有很多選項。 舊版本的Solr(4.x及更早版本)在標記中接受屬性sharedLib

<solr persistent="false" sharedLib="lib"></solr>
  • sharedLib-包含.jar文件的目錄的路徑,該文件已添加到每個核心的類路徑中。 該路徑相對於solr.homesolr.xml所在的位置)。

較新版本的Solr(5.x及更高版本)將sharedLib用作solr元素的子節點。

<?xml version='1.0' encoding='UTF-8'?>
<solr>
  <str name='sharedLib'>lib</str>
</solr>

即使在這種情況下, lib路徑也相對於solr.homesolr.xml所在的位置)。

另一種選擇是直接在solrconfig.xml定義一個lib指令

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM