Solr - разбиение на страницы по большому индексу - функциональность курсора требует сортировки, содержащей прерыватель связи поля UniqueKey - PullRequest
0 голосов
/ 18 июня 2019

Я обрабатываю весь индекс 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'.

Интересно, есть ли обходной путь для этого?Большое спасибо заранее.

1 Ответ

1 голос
/ 21 июня 2019

Просто обновление, и большое спасибо за вклад от MatsLindh.

Если вы столкнулись с такой же проблемой, как эта, то есть, (1) вы хотите экспортировать целый индекс куда-нибудь; (2) ваш индекс очень большой, например, с десятками миллионов записей; (3) вы не индексировали их с помощью 'docValues' в каких-либо полях, что означает, что вы не можете использовать более эффективный маркер курсора или обработчик экспорта; (4) и у вас недостаточно памяти для использования параметров 'start' и 'rows' с solr.

Решение состоит в том, чтобы использовать Lucene IndexReader напрямую для обхода solr. И я могу сообщить о порядках увеличения скорости. Для экспорта 90 миллионов записей с использованием этого подхода потребовалось всего 3 часа. В то время как раньше, когда я использовал Solr с «start» и «rows», потребовалось> 24 часа, чтобы экспортировать 16 миллионов.

...