4

我正在尝试设置一个 Solr dataimport.EventListener 来调用一个带有更新事件中添加的文档 ID 的 SOAP 服务。我有一个实现 org.apache.solr.handler.dataimport.EventListener 的类,我认为getAllEntityFields() 的结果会产生文档 ID 的集合。不幸的是,该方法的结果产生了一个空列表。更令人困惑的是 context.getSolrCore().getName() 产生一个空字符串而不是实际的核心名称。所以看来我在这里不太正确。

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

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

4

1 回答 1

2

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

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

使用 solr 的早期版本,您可以将一个处理程序链接在其他处理程序之上,如以下帖子中所回答。 Solr 和自定义更新处理程序

于 2012-12-04T07:43:03.610 回答