我正在使用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();
}
}
如果索引未更改,则cursorMark
值仍然有效。只要将最后一个cursorMark
保留在本地,就可以使用该cursorMark重新开始分页。
cursorMark
指示您已进入排序结果集的距离,因此它与常规分页中的页码一样好。
但是,如果索引已更改,则无法重复使用相同的cursorMark并期望获得所有结果(如果您正在对可以添加条目的字段进行排序(与时间有所不同)的字段上进行排序),但是对于常规分页也不正确。