0

我按照这里的建议实现了安全后过滤(使用 Solr 4.3.1)(并且工作正常),使用PostFilterhttp ://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 PostFilterDelegatingCollector也不是 。ExtendedQuery

谁能告诉我我缺少哪种方法或如何实现这种批处理?

在此先感谢,西蒙

4

1 回答 1

0

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

由于我使用的是 Solr 4.3.1 并且 Solr 4.5 还没有发布,所以我在代码中找不到解决方案。

于 2013-09-09T07:23:16.727 回答