我正在使用marklogic 4,我有大约15000个文档(每个大约10 KB).我想将整个内容作为文档加载(并将总文档转换为单个csv文件并输出到HTTP输出流以供下载).我以这种方式加载文档:
let $uri := cts:uri-match('products/documents/*.xml')
let $doc := fn:doc ($uri)
Run Code Online (Sandbox Code Playgroud)
xpath大约有15000 xmls.所以fn:doc会抛出错误XDMP-EXPNTREECACHEFULL.
这有什么解决方法吗?我无法在管理控制台中增加树缓存大小,因为products/documents/*.xml中的xml文件数可能会增加.
谢谢.
当您想从MarkLogic导出大量XML时,最好的方法是编写查询,以便结果可以流式传输,从而完全避免扩展的树缓存.但这是一种非常不同的编码风格:你必须避免任何类型的强类型,并重构代码以删除FLWOR表达式.您将无法测试cq或qconsole中的任何代码.
请访问http://blakeley.com/blogofile/2012/03/19/let-free-style-and-streaming/,了解如何到达目的地的一些提示.您发布的代码示例至少必须成为:
doc(cts:uri-match('products/documents/*.xml'))
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我会尝试重做那个以避免这个*.xml部分,因为它会比需要的慢.也许是这样的?
cts:search(
collection(),
cts:directory-query('products/documents/', 'infinity'))
Run Code Online (Sandbox Code Playgroud)
如果您需要测试除目录之外的其他内容,可以添加cts:and-query一些cts:element-query测试.