Xquery 避免XDMP-EXNTREECHACHEFULL和加载文档

Xquery 避免XDMP-EXNTREECHACHEFULL和加载文档,xquery,marklogic,Xquery,Marklogic,我使用的是MarkLogic4,我有大约15000个文档(每个文档大约10KB)。我想将整个内容作为文档加载(并将全部文档转换为单个csv文件,并输出到HTTP输出流以供下载)。当我以这种方式加载文档时: let $uri := cts:uri-match('products/documents/*.xml') let $doc := fn:doc ($uri) xpath有大约15000个XML。因此fn:doc抛出一个错误XDMP-EXPNTREECACHEFULL 有什么解决办法吗?我无

我使用的是MarkLogic4,我有大约15000个文档(每个文档大约10KB)。我想将整个内容作为文档加载(并将全部文档转换为单个csv文件,并输出到HTTP输出流以供下载)。当我以这种方式加载文档时:

let $uri := cts:uri-match('products/documents/*.xml')
let $doc := fn:doc ($uri)
xpath有大约15000个XML。因此fn:doc抛出一个错误XDMP-EXPNTREECACHEFULL

有什么解决办法吗?我无法在管理控制台中增加树缓存大小,因为产品/文档/*.xml中的xml文件数量可能会增加


谢谢。

当您想从MarkLogic导出大量XML时,最好的技术是编写查询以便结果可以流式传输,从而完全避免扩展树缓存。不过,这是一种非常不同的编码风格:您必须避免任何类型的强类型,并重构代码以删除FLWOR表达式。您也无法在cq或qconsole中测试任何代码

看一看如何到达那里的一些提示。您发布的代码示例至少必须是:

doc(cts:uri-match('products/documents/*.xml'))
顺便说一句,我会尝试重新编写它以避免
*.xml
部分,因为它会比需要的慢。也许是这样的

cts:search(
  collection(),
  cts:directory-query('products/documents/', 'infinity'))

如果需要测试目录以外的内容,可以添加
cts:并使用一些
cts:element query
test进行查询。

有关此错误的一般信息,请参阅XDMP-EXPNTREECACHEFULL上的