【问题标题】:Setting collection in MarkLogic在 MarkLogic 中设置集合
【发布时间】:2018-11-08 16:27:40
【问题描述】:

我有一个要求,我必须将集合设置为现有文档。问题是我有大约 2000 万条记录。我在查询控制台的查询下运行。它正在抛出超时错误。 我还在下面的查询中尝试了 limit=N 选项。在最大值我能够达到 N = 40000,之后它再次抛出超时错误。 请帮助我更快的查询或方法。

for $each in cts:uri-match("/data/employee/*") return xdmp:document-set-collections($each, "employee")

【问题讨论】:

标签: xquery marklogic


【解决方案1】:

ml-gradle 对此有 OOTB 支持,无需代码。请参阅https://github.com/marklogic-community/ml-gradle/wiki/DMSDK-Tasks#trying-it-out 并查看“mlAddCollections”。

【讨论】:

  • 是的,我记得有一个同名的任务。我们可以通过 roxy 框架使用类似的任务吗?
  • 您可以将 corb 与 roxy 一起使用 - 最简单的方法是使用 ad hoc 模块。但是您始终可以将 build.gradle 文件添加到您的 Roxy 项目中,仅用于使用与部署无关的 ml-gradle 任务。
【解决方案2】:

批处理是执行此类任务的正确选择。使用xdmp:spawn-function() 函数一次将多个任务放在任务服务器上。您只需要确定您的查询可以在 10 分钟或 1 小时内完成的记录数。

例如,如果查询可以在 10 分钟内执行 5000 条记录:

let $total-records := xdmp:estimate(collection())
let $batch-size := 5000
let $pagination := 0
for $records in 1 to fn:ceiling($total-records  div $batch-size )
let $start := fn:sum($pagination + 1)
let $end := fn:sum($batch-size + $pagination)
let $_ := xdmp:set($pagination, $end)
return
  xdmp:spawn-function
  (
  function(),
  for $each in cts:uri-match("/data/employee/*")[$start to $end]
  return xdmp:document-set-collections($each, "employee")
  )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多