如何在Solr中安排数据导入

时间:2010-07-08 17:07:30

标签: solr

wiki页面http://wiki.apache.org/solr/DataImportHandler解释了如何使用DataImportHandler索引数据。但该示例使用命令启动导入操作。我如何安排工作定期执行此操作?c

6 个答案:

答案 0 :(得分:13)

在UNIX / Linux上,cron jobs是你的朋友!在Windows上,有Task Scheduler

<强>更新
要从Java代码执行此操作,因为这是一个简单的GET请求,您可以使用HTTP Client库。有关使用GetMethod的信息,请参阅this tutorial

如果您需要以编程方式向Solr发送其他请求,则可能应使用Solrj library。它允许将所有基本命令发送到Solr,它可以配置为访问任何Solr处理程序:

CommonsHttpSolrServer server = new CommonsHttpSolrServer("http://localhost:8983/solr");
ModifiableSolrParams params = new ModifiableSolrParams();
params.set("command", "full-import");
QueryRequest request = new QueryRequest(params);
request.setPath("/dataimport");
server.request(request);

答案 1 :(得分:7)

我能够按照以下步骤使其工作:

  1. 创建类ApplicationListener,HTTPPostScheduler和SolrDataImportProperties(http://wiki.apache.org/solr/DataImportHandler#Scheduling上列出的源代码)。 我相信这些课程尚未提交。

  2. 将以下侦听器添加到Solr web.xml文件:

    <listener>
       <listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class>
    </listener>
    
  3. 按照维基页面中的说明配置dataimport.properties。

答案 2 :(得分:7)

使用crontab -e命令将此行简单地添加到您的crontab中:

0,30 * * * * /usr/bin/wget http://<solr_host>:8983/solr/<core_name>/dataimport?command=full-import 

这将每30分钟完全导入一次。将<solr_host><core_name>替换为您的配置

答案 3 :(得分:1)

Esteve Fernandez有一个新的补丁,使整个过程在Unix / Linux上运行:https://issues.apache.org/jira/browse/SOLR-2305

@Eldo如果您在构建自己的JAR时需要更多帮助,请在此处提出问题...

答案 4 :(得分:1)

这有点旧,但我创建了一个Windows WPF应用程序和服务来处理这个问题,因为如果你有很多内核/环境,使用CRON作业和任务调度程序有点难以维护。

https://github.com/systemidx/SolrScheduler

您基本上只是放入指定文件夹中的JSON文件,它将使用REST客户端向Solr发出命令。

答案 5 :(得分:1)

我们可以使用Quartz来做到这一点,就像linux上的crontab一样。但基本上,嵌入在jdk中的TimerTask对你来说已经足够了。