【问题标题】:Timeout for a loop in XQuery MarkLogicXQuery MarkLogic 中的循环超时
【发布时间】:2018-10-22 17:52:38
【问题描述】:

我在 MarkLogic(第 9 版)中收集了大约 100 万个文档,结构如下:

<File>
    <Id></Id>
    <ModifiedAt></ModifiedAt>
    <Author></Author>
    <Title></Title>
</File>

我需要遍历整个集合,并将所有文档的 ModifiedAt 中的空间替换为 T

文档示例:

     <File>
         <Id>12121</Id>
         <ModifiedAt>2011-06-08 14:29:29.000</ModifiedAt>
         <Author>Test</Author>
         <Title>Test</Title>
    </File>

字段 ModifiedAt 应变为:2011-06-08T14:29:29.000

代码如下:

for $doc in fn:collection('File')
    return xdmp:node-replace($doc/File/ModifiedAt,<ModifiedAt>{fn:replace($doc/File/ModifiedAt,' ','T')}</ModifiedAt>)

问题是这段代码返回超时。

我认为有一种更优雅的方法可以对整个集合进行此修改,也许有人有提示。

谢谢!

【问题讨论】:

  • Marklogic 正在尝试在一个事务中完成此查询,这会导致超时错误。您可以将它们放入一万条记录中,或者使用 xdmp:spawn() 函数将它们放入队列中。

标签: xquery marklogic marklogic-9


【解决方案1】:

有各种外部工具,如Corb2MLCP 可用于此目的,但您也可以在 MarkLogic 内部进行临时或较少临时工作。您基本上需要做的就是批量处理。 Taskbot 对此非常有用:

https://github.com/mblakele/taskbot

HTH!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    相关资源
    最近更新 更多