Как возобновить поиск SOLR, используя Solrj со страницы? - PullRequest
0 голосов
/ 31 марта 2020

Я повторяю весь solr, используя solrj. Solr вернет мне страницу с записями uuid, и я проверяю uuid в моем хранилище Fedora Commons. Я хочу повторить весь solr, в моем случае это может занять до одной недели до 100 *. До сих пор он работал 3 дня, а затем произошел сбой при ошибке, не связанной с solr.

Итак, я спрашиваю, есть ли способ, как запустить поиск по какой-то определенной c странице результатов? Допустим, я всегда буду регистрировать свою последнюю страницу, поэтому в следующий раз, когда моя программа завершится сбоем, мне не нужно будет запускать ее с самого начала, но вместо этого я буду запускать ее с последней страницы, на которой произошла ошибка моей программы. Кто-нибудь может помочь? Спасибо.

Как я повторяю 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();
        }
}

1 Ответ

0 голосов
/ 31 марта 2020

Если индекс не изменился, значение cursorMark остается в силе. Пока вы сохраняете последние cursorMark локально, вы можете перезапустить нумерацию страниц с помощью курсора.

cursorMark указывает, насколько далеко вы продвинулись в отсортированном наборе результатов, так что хорошо, как номер страницы в обычном разбиении на страницы.

Если индекс изменился, вы не можете повторно использовать тот же курсор и ожидать получить все результаты (если вы сортируете по полю, которое может иметь записи, добавленные ранее (что-то отличное от времени), - но это не будет верно и для обычной нумерации страниц.

...