导入操作完成后,获取已添加文档的ID

时间:2012-11-29 19:13:45

标签: solr dataimporthandler

我正在尝试设置Solr dataimport.EventListener来调用SOAP服务,其中包含已在update事件中添加的文档的ID。我有一个实现org.apache.solr.handler.dataimport.EventListener和我思想的类,getAllEntityFields()的结果将产生一组文档ID。不幸的是,该方法的结果产生一个空列表。更令人困惑的是context.getSolrCore()。getName()产生一个空字符串而不是实际的核心名称。所以看来我在这里并没有走上正确的道路。

目前的设置如下: 每当在SQL中调用某个sproc时,它就会将消息放入队列中。此队列上有一个侦听器,它启动一个程序,该程序读取队列并调用其他sprocs。完成sprocs后,在Solr上执行增量或完全导入操作。紧接着,调用一个方法来更新缓存。但是,由于在调用此更新方法之前,Solr上的导入操作可能尚未完成,因此可能会使用“陈旧”数据更新缓存。

我希望使用dataimport EventListener来调用更新缓存的方法,因为我的其他选项看起来太复杂了(例如,轮询dataimport URL以确定何时调用更新方法或使用队列列出文档ID需要更新并让EventListener调用服务上的方法来接收此队列并更新缓存)。我在查找文档或示例时遇到了一些困难。有没有人对如何处理这个问题有任何想法?

1 个答案:

答案 0 :(得分:2)

据我所知,您正在尝试在添加文档时更新缓存。根据您运行的solr版本,您可以执行以下操作之一。

Solr 4.0提供了允许您执行此操作的脚本转换器。 http://wiki.apache.org/solr/DataImportHandler#ScriptTransformer

使用先前版本的solr,您可以将一个处理程序链接到另一个处理程序之上,如以下帖子所述。 Solr and custom update handler