我有一份 MarkLogic CoRB 工作。它应该返回 100 条记录。但它失败了
SEVERE: received more than 1 results: 1
。
我真的很感谢您提供的任何帮助。
uris.xqy:
declare namespace lab = "http://labs.com/record";
declare namespace meta="http://labs.com/lab/record/meta";
let $org := ("Ros* Lab*")
for $uri in cts:uris(
(),
(),
cts:and-query((
cts:collection-query('/Lab'),
cts:field-range-query("updated","<","2023-08-18"),
cts:or-query((
cts:field-word-query("do",$org,"case-insensitive"),
))
))
)
return (count($uri),$uri)
uris-process.xqy:
xquery version "1.0-ml";
declare namespace lab = "http://labs.com/record";
declare namespace meta="http://labs.com/lab/record/meta";
declare variable $URI as xs:string external;
xdmp:set-request-time-limit(3600),
for $uris in $URI
let $doc := fn:doc($uris)
let $meta := <lab:Record><meta:Metadata>
$doc//meta:IDNumber}
{$doc//meta:ReportDate}
{$doc//meta:ReportNumbers}
</meta:Metadata></lab:Record>
let $IDNumber := fn:data($meta//meta:IDNumber)
return
xdmp:save(fn:concat("/XML/",$IDNumber,".xml")$IDNumber ,$meta)
产生此异常:
SEVERE: interrupted: exiting
java.lang.InterruptedException
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2088)
at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
at java.util.concurrent.ExecutorCompletionService.poll(ExecutorCompletionService.java:202)
at com.marklogic.developer.corb.Monitor.monitorResults(Monitor.java:97)
at com.marklogic.developer.corb.Monitor.run(Monitor.java:76)
at java.lang.Thread.run(Thread.java:750)
Sep 11, 2023 3:32:41 PM com.marklogic.developer.corb.Manager run
SEVERE: received more than 1 results: 1
Sep 11, 2023 3:32:41 PM com.marklogic.developer.corb.Manager stop
INFO: cleaning up
Sep 11, 2023 3:32:41 PM com.marklogic.developer.corb.Manager main
SEVERE: Error while running CORB
java.lang.ArrayIndexOutOfBoundsException: received more than 1 results: 1
您的 URI 模块看起来不正确。
您正在使用 for 循环迭代每个 URI。
for $uri in cts:uris(
然后对于每个 URI,您将返回一个计数(1),然后为 100 个 URI 中的每一个返回
$uri
。
因此,您的作业中返回的第一件事是
1
的计数,但随后您将返回序列中的 199 个其他项目。
你想改为让一个
$uris
变量
let $uris := cts:uris(
然后仅返回一个具有计数的序列,然后返回每个 $uri。
return (count($uris), $uris)