【问题标题】:How to save a list of URIs matching a pattern in Marklogic with corb?如何使用 corb 保存与 Marklogic 中的模式匹配的 URI 列表?
【发布时间】:2021-06-10 16:21:11
【问题描述】:

我需要一些有关 MarkLogic、XQuery 和 corb 的帮助,

我在数据库中有数百万个文档,我正在尝试编写 XQuery 来保存匹配的 uri。

urisVersions.xqy

xquery version "1.0-ml";
let $uris := cts:uri-match("*versions/*version-*")

return (fn:count($uris), $uris)

urisSave.xqy

xquery version "1.0-ml";
declare variable $URI as xs:string external;

let $uri := $URI 
return xdmp:save("/tmp/test",$uri)

保存作业.properties

XCC-CONNECTION-URI= xcc://user:admin@localhost:8000/
URIS-MODULE=urisVersions.xqy|ADHOC
XQUERY-MODULE=urisSave.xqy|ADHOC
THREAD-COUNT=10

出现以下错误 严重:致命错误 com.marklogic.developer.corb.CorbException:URI 处的参数类型无效:/12312/versions/item/papkov.xml.version-24

谁能帮我解决这个问题?

【问题讨论】:

  • 那个错误是因为xdmp:save()的第二个参数需要是一个节点。您正在提供带有 URI 的字符串。您可以保存 text() 节点:xdmp:save("/tmp/test", text{$uri}) 但是,进程模块的每次调用都会争取覆盖该“/tmp/test”文件 - 不好。您想使用将流程模块的输出写入文件的 CoRB 任务。

标签: marklogic marklogic-corb


【解决方案1】:

使用PROCESS-TASK 选项配置作业以使用com.marklogic.developer.corb.ExportBatchToFileTask 类,该类会将每个流程模块调用的结果写入输出文件。您可以使用EXPORT-FILE-NAMEEXPORT-FILE-DIR 选项配置写入文件的位置和文件名。如果您没有配置 EXPORT-FILE-DIR 并且只是给它一个带有 EXPORT-FILE-NAME 的文件名,它会写入相对于启动 CoRB 的位置。

PROCESS-TASK=com.marklogic.developer.corb.ExportBatchToFileTask
EXPORT-FILE-NAME=versionsURIs.txt

更改您的流程模块以简单地返回 $URI 值:

xquery version "1.0-ml";
declare variable $URI as xs:string external;
$URI

如果您只想将 URI 写入文件而不进行转换或进行任何处理,那么您可以使用 ModuleExecutor 类并将 cts:uri-match 的结果直接写入输出文件。

【讨论】:

  • 谢谢@Mads Hansen
猜你喜欢
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多