Solr:如何从PostFilter对外部系统执行批量请求?

时间:2013-08-11 19:10:56

标签: solr lucene acl

我使用PostFilter实现了此处提出的安全后置过滤(使用Solr 4.3.1)(并且工作正常): http://searchhub.org/2012/02/22/custom-security-filtering-in-solr/

PostFilter interface的评论说:

  

当必须查询外部系统时,此收集器接口还可以实现更好的性能,因为文档ID可以缓冲并批量处理到外部系统的单个请求中。

这正是我想要做的。

如何基于上面链接的实现来实现这一点的计划是明确的: 不要在super.collect(int)返回的匿名类的collect(int)中调用getFilterCollector(IndexSearcher),而是记住文档ID。收集完所有文档后(即已在所有文档上调用collect(int)),将批量请求发送到外部ACL系统,并仅为那些通过安全检查的文档调用super.collect(doc)。 / p>

但我怎么知道DelegatingCollector.collect(int)的某个调用是当前查询的最后一个调用? 我在PostFilterDelegatingCollectorExtendedQuery中都找不到任何方法,这些方法在收集过程结束时调用。

有人可以告诉我我缺少哪种方法或者如何实现这种批处理?

提前致谢, 西蒙

1 个答案:

答案 0 :(得分:0)

LucidWorks的友好支持员工非常友好地指出了正确的Solr问题: https://issues.apache.org/jira/browse/SOLR-5020

由于我使用Solr 4.3.1并且Solr 4.5尚未发布,我在代码中找不到解决方案。