MarkLogicXQuery

MarkLogicXQuery,marklogic,marklogic-corb,Marklogic,Marklogic Corb,我需要使用corb生成报告 Data: Collection A : Col1,Col2,Col3,Col4 Collecntion B: Col1,Col5,Col6,Col7 Collection C: Col1,Col8,Col9 Output Requirement: Col1,Col2,Col5,Col6,Col8 其中Col1在某种程度上是集合B、C中的内部联接 我的uri.xqy如下所示: (:Get the list from Col1 to join on all:) le

我需要使用corb生成报告

Data:
Collection A : Col1,Col2,Col3,Col4
Collecntion B: Col1,Col5,Col6,Col7
Collection C: Col1,Col8,Col9

Output Requirement: Col1,Col2,Col5,Col6,Col8
其中Col1在某种程度上是集合B、C中的内部联接

我的
uri.xqy
如下所示:

(:Get the list from Col1 to join on all:)
let $listFromCol1 := cts:element-values(xs:QName("Col1"),(),(),cts:and-query(....))

let $A := cts:uris((),(),cts:and-query((cts:collection-query("A"),cts:element-range-query(xs:QName("Col1"),"=",$ListFromCol1)))
let $B := cts:uris((),(),cts:and-query((cts:collection-query("B"),cts:element-range-query(xs:QName("Col1"),"=",$ListFromCol1)))
let $C := cts:uris((),(),cts:and-query((cts:collection-query("C"),cts:element-range-query(xs:QName("Col1"),"=",$ListFromCol1)))
现在,我得到了各个集合的URI。我需要在
返回(count($uris),$uris)
中将此消息传递给我的
进程.xqy

我想知道如何计算所有$A、$B、$C和$A、$B、$C的所有URI的计数


请帮助

如果您有一组非常大的URI,那么您可能需要启用磁盘队列选项

DISK-QUEUE=true
将通过允许CORB在接收和管理从URIs.xqy返回的URI队列时溢出到磁盘,而不是将它们全部保存在内存中,从而避免内存不足异常

如果需要在输出中获得一组不同的URI,可以返回流程模块中的所有候选URI,并让CORB通过使用ExportBatchToFileTask的
EXPORT-FILE-SORT=ascending | distinct
选项执行重复数据消除

启用这些选项的示例属性:

DISK-QUEUE=true
EXPORT-FILE-NAME=/local/path/to/exportFile.txt
EXPORT-FILE-SORT=ascending|distinct
PROCESS-TASK=com.marklogic.developer.corb.ExportBatchToFileT‌​ask

如果您有一组非常大的URI,则可能需要启用磁盘队列选项

DISK-QUEUE=true
将通过允许CORB在接收和管理从URIs.xqy返回的URI队列时溢出到磁盘,而不是将它们全部保存在内存中,从而避免内存不足异常

如果需要在输出中获得一组不同的URI,可以返回流程模块中的所有候选URI,并让CORB通过使用ExportBatchToFileTask的
EXPORT-FILE-SORT=ascending | distinct
选项执行重复数据消除

启用这些选项的示例属性:

DISK-QUEUE=true
EXPORT-FILE-NAME=/local/path/to/exportFile.txt
EXPORT-FILE-SORT=ascending|distinct
PROCESS-TASK=com.marklogic.developer.corb.ExportBatchToFileT‌​ask

您希望迭代Col1值,而不是URI。Corb是否允许您像返回URI一样返回Col1值?如果您在col1上执行cts:search,您可以一次性获得与该记录相关的所有文档,并可以构建您的报告所需的记录。否则会变得有点复杂……你试过了吗?;-)您只需要一个以$a、$B、$C为单位的URI的独特列表?为什么不将它们与
cts:collection-query()
中指定的每个集合合并为一个查询?如下所示:
cts:uri((),(),cts:and query((cts:collection query((“A”,“B”,“C”)),cts:element range query(xs:QName(“Col1”),“=”,$ListFromCol1)))
此外,如果您有上千万个URI,您可能还希望启用
磁盘队列
选项,以避免耗尽JVM内存。听起来您已经找到了一个解决方案--@MadsHansen,您能将其作为一个答案写出来,让人们很容易看到这个问题已经得到解决吗?您想迭代Col1值,不是URI。Corb允许您像返回URI一样返回Col1值吗?如果您在Col1上执行cts:搜索,您可以一次获得与该记录相关的所有文档,并可以为您的报告构造所需的记录。否则它会变得更复杂。。您尝试过吗?;-)您只需要一个以$a、$B、$C为单位的URI的不同列表吗?为什么不将它们与
cts:collection-query()
中指定的每个集合合并为一个查询?如下所示:
cts:uri((),(),cts:and query((cts:collection query((“A”,“B”,“C”)),cts:element range query(xs:QName(“Col1”),“=”,$ListFromCol1)))
此外,如果您有上千万个URI,您可能还想启用
磁盘队列
选项,以避免耗尽JVM内存。听起来您有一个解决方案--@MadsHansen,您能把它写下来作为一个答案,让人们很容易看到这个问题已经得到解决吗?