根据外部数据

时间:2016-01-12 19:41:23

标签: java lucene

我需要应用自定义过滤器,以确保执行搜索的用户有权查看搜索者返回的文档。我扩展了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;
    }
}

0 个答案:

没有答案