MarkLogicXQuery
我需要使用corb生成报告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
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.ExportBatchToFileTask
如果您有一组非常大的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.ExportBatchToFileTask
您希望迭代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,您能把它写下来作为一个答案,让人们很容易看到这个问题已经得到解决吗?