扩展树缓存已满错误

expanded tree cache full Error

对于以下代码,我的扩展树缓存已满:

xquery version "1.0-ml";
let $result :=
  <root>{
    cts:search(
      fn:collection("metadata-search")/metadata,
      cts:and-query((   
          cts:element-value-query(xs:QName('AssetID'), "*")
      ))
    )/assetIdentifiers/assetIdentifier/AssetID


  }</root>
let $path := "D:\Output\input.xml"
return 
  xdmp:save($path, $result,
            <options xmlns="xdmp:save">
              <method>xml</method>
            </options>
  )

但是如果相同的代码我 运行 在迭代模式下它工作正常:

xquery version "1.0-ml";
let $result :=
  <root>{
    for $data in cts:search(
      fn:collection("metadata-search")/metadata,
      cts:and-query((   
         cts:element-value-query(xs:QName('AssetID'), "*")
      ))
    )
    return $data/assetIdentifiers/assetIdentifier/AssetID
  }</root>
let $path := "D:\Output\input.xml"
return 
  xdmp:save($path, $result,
            <options xmlns="xdmp:save">
              <method>xml</method>
            </options>
  )

数据库中有 450000 项资产,运行 花了 10 分钟,我想知道为什么其他代码构造工作正常,而不是第一个?任何想法,请让我详细了解这段代码的上下文?

第一种方法对完整结果集应用 XPath 表达式。 XPath 强制执行文档排序结果,迫使 MarkLogic 对整个结果集进行排序。第二个为每个文档执行它,运行速度更快。

请注意,它仍然无法很好地扩展。如果确实需要,您最好将搜索结果分批处理,单独保存批次,然后在 MarkLogic 之外聚合成总计 xml。 Corb2, and libraries like DMSDK 等工具在这里很有用,可以为您完成繁重的工作。

HTH!