在MarkLogic中设置集合

时间:2018-11-08 16:27:40

标签: xquery marklogic

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

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

2 个答案:

答案 0 :(得分:1)

ml-gradle为此提供了OOTB支持,不需要任何代码。请参见https://github.com/marklogic-community/ml-gradle/wiki/DMSDK-Tasks#trying-it-out并查看“ mlAddCollections”。

答案 1 :(得分:0)

分批处理是执行此类任务的正确选项。使用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")
  )