Как отсортировать результаты при использовании API перемещения данных?

Я использую marklogic 9 и api перемещения данных для экспорта результатов поиска. Я создаю такой запрос:

StructuredQueryDefinition query = ...
String sortOptionsXml = "<sort-order  direction=\"" + sortDirection + "\">" + "<path-index>" + sortIndex + "</path-index>" + "</sort-order>";
String queryAsXml = "<search xmlns=\"http://marklogic.com/appservices/search\">" + query.serialize()
                + "<options><search-option>filtered</search-option>\n" + sortOptions + "</options>" + "</search>"
RawCombinedQueryDefinition combinedQueryDefinition = queryManager
            .newRawCombinedQueryDefinition(new StringHandle().with(queryAsXml).withFormat(Format.XML));

а затем я отправляю этот запрос в QueryBatcher, созданный следующим образом:

QueryBatcher batcher = databaseClient.newDataMovementManager().newQueryBatcher(query)

и запустите дозатор как:

batcher.withBatchSize(500)
        .withThreadCount(8)
        .onUrisReady(
                new QueryBatchListener() {
                    @Override
                    public void processEvent(QueryBatch queryBatch) {
                        LOGGER.info(String.join(",", queryBatch.getItems()));
                    }
                }
        )
        .onQueryFailure(Exception::printStackTrace);
JobTicket jobTicket = dataMovementManager.startJob(batcher);
batcher.awaitCompletion();
dataMovementManager.stopJob(jobTicket);

Однако, если я посмотрю на возвращенные элементы, они не будут отсортированы по используемым мною параметрам сортировки, даже внутри пакета. Можно ли отсортировать URI?


person brunovianarezende    schedule 27.04.2018    source источник


Ответы (1)


Отвечаю себе: это невозможно. Я создал билет в проекте marklogic github (https://github.com/marklogic/java-client-api/issues/916), и окончательный вывод был (https://github.com/marklogic/java-client-api/issues/916#issuecomment-385773027):

DMSDK разделяет огромные задачи на небольшие части, направляя запрос в каждый лес и получая URI из каждого леса в пакетном режиме. Даже если мы передадим параметры сортировки, мы получим упорядочение по лесу, а не в целом. Поскольку мы не можем получить глобальный порядок, мы решили отбросить параметры, и нет смысла иметь порядок на уровне леса.

person brunovianarezende    schedule 02.05.2018