1

我正在使用 solrj 迭代整个 solr。Solr 将返回包含 uuid 记录的页面,我正在我的 Fedora Commons Repository 中检查该 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();
        }
}
4

1 回答 1

1

如果索引未更改,则该cursorMark值仍然有效。只要您将最后cursorMark存储的内容保留在本地,您就可以使用该 cursorMark 重新启动分页。

指示您在排序结果集中的cursorMark进展程度,因此它与常规分页中的页码一样好。

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

于 2020-03-31T10:22:46.113 回答