Я обрабатываю весь индекс solr из 80 миллионов документов и делаю это через нумерацию страниц.
Я узнал от здесь , что это плохая идея использовать параметры start
для разбивки на страницы с очень большим индексом, как это, вместо этого я должен использовать маркер курсора, используя код, как показано ниже:
query.setSort("id", SolrQuery.ORDER.asc);
while (! done) {
q.set(CursorMarkParams.CURSOR_MARK_PARAM, cursorMark);
QueryResponse rsp = solrServer.query(q);
String nextCursorMark = rsp.getNextCursorMark();
boolean hadEnough = doCustomProcessingOfResults(rsp);
if (hadEnough || cursorMark.equals(nextCursorMark)) {
done = true;
}
cursorMark = nextCursorMark;
}
Однако для этого требуется, чтобы запрос сначала отсортировал весь индекс в поле uniqueKey, которое определяется как:
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
, для работы которого требуется много памятии мой компьютер не имеет достаточно памяти, чтобы справиться с этим.Он генерирует ошибку 'outofmemory'.
Интересно, есть ли обходной путь для этого?Большое спасибо заранее.