0

我正在使用 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 进行排序?

4

1 回答 1

0

回答自己:不可能。我在marklogic github项目(https://github.com/marklogic/java-client-api/issues/916)上创建了一张票,最后的结论是(https://github.com/marklogic/java-client-api /issues/916#issuecomment-385773027):

DMSDK 通过将查询定向到每个林并从每个林分批获取 URI,将庞大的任务拆分为小块。即使我们传递排序选项,我们也会得到每个森林的排序,而不是整体排序。由于我们无法获得全局排序,因此我们选择放弃这些选项,并且在森林级别进行排序是没有意义的。

于 2018-05-02T11:59:08.560 回答