我按照这里的建议实现了安全后过滤(使用 Solr 4.3.1)(并且工作正常),使用PostFilter
:
http ://searchhub.org/2012/02/22/custom-security-filtering-in-solr/
PostFilter 接口的注释说:
当必须咨询外部系统时,此收集器接口还可以实现更好的性能,因为文档 ID 可以被缓冲并批处理为对外部系统的单个请求。
这正是我想做的。
基于上面链接的实现如何实现这一点的计划很明确:不要调用返回super.collect(int)
的collect(int)
匿名类getFilterCollector(IndexSearcher)
,而是记住文档 ID 和。一旦收集了所有文档(collect(int)
即已对所有文档调用),就向外部 ACL 系统发出批处理请求,并且super.collect(doc)
只调用那些通过安全检查的文档。
但是我怎么知道某个调用DelegatingCollector.collect(int)
是当前查询的最后一个调用呢?我找不到在收集过程结束时调用的任何方法,既不是 in PostFilter
,DelegatingCollector
也不是 。ExtendedQuery
谁能告诉我我缺少哪种方法或如何实现这种批处理?
在此先感谢,西蒙