Lucene Solr中的DIH调度

Lucene Solr中的DIH调度,lucene,solr,Lucene,Solr,我刚刚开始玩Solr,我已经在Tomcat上部署并运行了它。我已经设置了模式和数据导入处理程序,它对文件进行了索引。现在我想安排这个dataImportHandler每小时左右运行一次 有一个wiki页面详细介绍了这些文件 但是没有关于在何处创建文件以及如何部署文件的说明 以前也有人问过类似的关于堆栈溢出的问题 答案是“创建类ApplicationListener、HTTPPostScheduler和SolrDataImportProperties”。我不知道应该在哪里创建类。但是我猜了一下,下

我刚刚开始玩Solr,我已经在Tomcat上部署并运行了它。我已经设置了模式和数据导入处理程序,它对文件进行了索引。现在我想安排这个dataImportHandler每小时左右运行一次

有一个wiki页面详细介绍了这些文件

但是没有关于在何处创建文件以及如何部署文件的说明

以前也有人问过类似的关于堆栈溢出的问题

答案是“创建类ApplicationListener、HTTPPostScheduler和SolrDataImportProperties”。我不知道应该在哪里创建类。但是我猜了一下,下载了最新的夜间构建,并在org.apache.solr.handler.dataimport.scheduler包中创建了类(从wiki页面复制粘贴类)。我编译并运行antdist命令来创建可部署的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中删除侦听器代码,才能像以前一样工作


知道我可能做错了什么吗?

如果您复制了ApplicationListener等的源代码并运行了生成,您可能需要检查这些文件是否正在编译到您的发行版中。您可以打开war文件,查看是否有一个jar包含您提到的类的.class文件,或者查看.war中的classes目录中是否有这些文件。如果没有,则不会加载到web应用程序中(因此部署失败)

您可能需要自己编译它们(创建自己的jar文件,该文件已经编译了类),并手动将jar文件包含在war文件中(至少这是一个很好的测试)


您也可以使用Stackoverflow帖子中的第二个答案,即从cron或task scheduler调用命令行。

我从Solr邮件列表中得到了以下回复:

Wiki页面描述了一个调度器的设计,它还没有提交给Solr(我选中了)。前几天我确实看到了一个补丁(见),但它看起来没有经过很好的测试

我认为现在你基本上被一些类似cron的东西困住了。如果您的应用程序是用java编写的,请查看Quartz调度程序-

有关定期调用任何HTTP链接的简单WAR,请参阅my。例如,该链接可以是用于启动增量导入的DIH链接。该项目是LGPL。JNDI用于调度作业,而无需重新构建WAR。下面的示例直接使用固定延迟调用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>
TIMEAPI-UTC-NOW="FD|15000|60000|http://www.timeapi.org/utc/now.json"

是的,我确实确保类文件在jar文件中。我现在还不想使用cron作业,因为我想让Solr成为应用程序包的一部分,为它提供客户端。因此,与其让他们运行cron作业,我宁愿让调度器部分包含在solr包中,这是最简单的解决方案。使用cron条目每小时向
dataimporthandler
发出一次请求。