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



我正在尝试设置Solr数据导入。EventListener使用已添加到更新事件中的文档的ID来调用SOAP服务。我有一个实现org.apache.solr.handler.dataimport.EventListener的类,并且我认为getAllEntityFields()的结果将产生文档ID的集合。不幸的是,该方法的结果产生了一个空列表。更令人困惑的是context.getSolrCore().getName()生成的是一个空字符串,而不是实际的核心名称。看来我在这条路上走得不太对。

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

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

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

Solr 4.0提供了脚本转换器,可以让您做到这一点。http://wiki.apache.org/solr/DataImportHandler#ScriptTransformer

使用solr的早期版本,您可以将一个处理程序链接到另一个处理器上,如下文所述。Solr和自定义更新处理程序

最新更新