我使用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)
的某个调用是当前查询的最后一个调用?
我在PostFilter
,DelegatingCollector
和ExtendedQuery
中都找不到任何方法,这些方法在收集过程结束时调用。
有人可以告诉我我缺少哪种方法或者如何实现这种批处理?
提前致谢, 西蒙
答案 0 :(得分:0)
LucidWorks的友好支持员工非常友好地指出了正确的Solr问题: https://issues.apache.org/jira/browse/SOLR-5020
由于我使用Solr 4.3.1并且Solr 4.5尚未发布,我在代码中找不到解决方案。