如何在使用Data Movement API时对结果进行排序?

时间:2018-04-27 20:03:46

标签: marklogic marklogic-9

我正在使用marklogic 9和数据移动api来导出搜索结果。我创建了一个类似的查询:

.length()

然后我将此查询发送到QueryBatcher,创建如下:

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));

启动batcher:

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

但是,如果我查看返回的项目,它们不会按我使用的排序选项排序,甚至不在批处理中。是否可以对URI进行排序?

1 个答案:

答案 0 :(得分: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。甚至   如果我们传入排序选项,我们会得到每个森林的排序   而不是整体而言。由于我们无法获得全球订购,我们选择了   放弃选项,订购时没有意义   森林水平。