我需要应用自定义过滤器,以确保执行搜索的用户有权查看搜索者返回的文档。我扩展了simpleCollector。但是,在Java Docs中建议不要同时使用indexSearch和Reader:
注意:这是在内部搜索循环中调用的。为了获得良好的搜索性能,此方法的实现不应在每次匹配时调用IndexSearcher.doc(int)或org.apache.lucene.index.IndexReader.document(int)。这样做会使搜索速度降低一个数量级或更多。
我需要获取文件以获取id术语并检查数据库中保存的数据。有没有其他方法来过滤结果,然后使用收集器? 是否有更有效的方法来获取文档而不调用indexSearcher?
我的代码目前如下:
public class PermittedResultsCollector extends SimpleCollector {
private IndexSearcher searcher;
public PermittedResultsCollector(IndexSearcher searcher) {
this.searcher = searcher;
}
public boolean needsScores() {
return false;
}
@Override
public void collect(int doc) throws IOException {
Document document = searcher.doc(doc);
if (callToExternalService(document.get("id"))){
throw new CollectionTerminatedException();
}
}
public IndexSearcher getSearcher() {
return searcher;
}
}