如何使用Solrj从页面重新启动SOLR搜索?

问题描述 投票:0回答:1

我正在使用solrj迭代整个solr。 Solr将返回带有uuid记录的页面给我,我正在检查Fedora Commons存储库中的uuid。我要迭代整个solr,就我而言可能需要长达一周的时间才能完成。到目前为止,它运行了3天,然后因与solr不相关的错误而失败。

所以我问,有没有一种方法可以从特定的结果页面运行搜索?假设我总是记录我的最后一页,所以下次我的程序失败时,我不需要从头开始运行它,而是从程序失败的最后一页开始运行它。有人可以帮忙吗?谢谢。

我如何迭代Solr:

for (String model : models) {
        try {
            //SOLR
            final String solrUrl = "http://localhost:1234/solr/test";
            HttpSolrClient solr = new HttpSolrClient.Builder(solrUrl).build();
            solr.setParser(new XMLResponseParser());
            SolrQuery query = new SolrQuery();
            query.setQuery("fedora." + model);
            query.setRows(10);
            query.addSort("PID", SolrQuery.ORDER.asc);
            String cursorMark = CursorMarkParams.CURSOR_MARK_START;
            boolean done = false;
            while (!done) {
                query.set(CursorMarkParams.CURSOR_MARK_PARAM, cursorMark);
                QueryResponse rsp = solr.query(query);
                String nextCursorMark = rsp.getNextCursorMark();
                for (SolrDocument doc : rsp.getResults()) {
                    ....I do something with result
                }
                if (cursorMark.equals(nextCursorMark)) {
                    done = true;
                }
                cursorMark = nextCursorMark;
            }
            solr.close();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
}
java solr solrj fedora-commons
1个回答
0
投票

如果索引未更改,则cursorMark值仍然有效。只要将最后一个cursorMark保留在本地,就可以使用该cursorMark重新开始分页。

cursorMark指示您已进入排序结果集的距离,因此它与常规分页中的页码一样好。

但是,如果索引已更改,则无法重复使用相同的cursorMark并期望获得所有结果(如果您正在对可以添加条目的字段进行排序(与时间有所不同)的字段上进行排序),但是对于常规分页也不正确。

© www.soinside.com 2019 - 2024. All rights reserved.