2011-06-21 61 views
0

我剛開始使用Solr進行遊戲時,我已經部署並運行在Tomcat上。我有架構和數據導入處理程序設置,它索引文件就好了。現在我想安排這個dataImportHandler運行每小時左右。Solr中的DIH調度

有一個wiki頁面詳細說明了文件here

但也有不允許在創建文件以及如何部署它們

類似的問題已經被問對堆棧溢出here之前的指令。

答案是「創建類ApplicationListener,HTTPPostScheduler和SolrDataImportProperties」。我不知道我應該在哪裏創建課程。但是我猜測,我下載了最新的每晚構建,並在org.apache.solr.handler.dataimport.scheduler包中創建了這些類(從Wiki頁面複製粘貼這些類)。我編譯並運行ant dist命令來創建可部署的jar文件。

我按照wiki中的說明配置dataimport.properties,然後按照上面的答案中的指示將監聽器添加到web.xml文件中。但是當我開始Tomcat solr沒有部署。

我在日誌文件中看到此錯誤消息:

INFO: Starting Servlet Engine: Apache Tomcat/7.0.14 
Jun 21, 2011 5:20:47 PM org.apache.catalina.startup.HostConfig deployDescriptor 
INFO: Deploying configuration descriptor solr.xml from /home/sabman/programs/apache-tomcat-7.0.14/conf/Catalina/localhost 
Jun 21, 2011 5:20:47 PM org.apache.catalina.startup.HostConfig deployDescriptor 
WARNING: A docBase /home/sabman/programs/apache-tomcat-7.0.14/webapps/solr.war inside the host appBase has been specified, and will be ignored 
Jun 21, 2011 5:20:47 PM org.apache.catalina.startup.SetContextPropertiesRule begin 
WARNING: [SetContextPropertiesRule]{Context} Setting property 'debug' to '0' did not find a matching property. 
Jun 21, 2011 5:20:48 PM org.apache.catalina.core.StandardContext startInternal 
SEVERE: Error listenerStart 

我不得不從web.xml中刪除監聽器代碼,它的工作,因爲它以前。

有關我可能做錯什麼的想法嗎?

+0

最簡單的解決方案。使用cron條目每小時向'dataimporthandler'發出請求。 – mhitza

回答

1

我從Solr的郵件列表這個答覆:

wiki頁面介紹了調度,其還未被提交到Solr但(我查)的設計。前幾天我看到了一個補丁(見https://issues.apache.org/jira/browse/SOLR-2305),但看起來沒有經過很好的測試。

我認爲你現在基本上被卡住了類似cron的東西。如果你的應用程序是用java編寫的,那麼看看Quartz調度程序 - http://www.quartz-scheduler.org/

0

如果您複製ApplicationListener等的源代碼並運行構建,則可能需要檢查文件是否真正被編譯到您的發行版中。您可以通過打開war文件並查看是否存在包含您提及的那些類的.class文件的jar或查看.war中的classes目錄以查看它們是否在那裏。如果他們不是,那麼他們將無法加載到Web應用程序中(因此部署失敗)。你可能需要自己編譯它們(創建你自己的已編譯類的jar文件),並手動將jar文件包含在war文件中(這將是一個很好的測試,至少)。

您也可以使用Stackoverflow帖子的第二個答案,即從cron或任務計劃程序調用命令行。

+0

是的,我確定Class文件在jar文件中。 我不想使用cron作業,因爲我想使Solr成爲應用程序包的一部分,以便爲其提供客戶端。所以,不要讓他們運行cron作業,而是讓solr包中的調度器部分。 – sabman

1

請參閱我的TimerHttpTask以獲得一個簡單的WAR來定期調用任何HTTP鏈接。例如,鏈接可以是DIH鏈接以開始增量導入。該項目是LGPL。 JNDI用於在不重建WAR的情況下安排作業。以下示例直接使用TimerHttpTask使用固定延遲調用URL,初始延遲時間爲15秒,此後每60秒調用一次。

碼頭JNDI配置

<Call name="setProperty"> 
    <Arg>TIMEAPI-UTC-NOW</Arg> 
    <Arg>FD|15000|60000|http://www.timeapi.org/utc/now.json</Arg> 
</Call> 

Tomcat的JNDI配置

TIMEAPI-UTC-NOW="FD|15000|60000|http://www.timeapi.org/utc/now.json"