2017-04-06 53 views
1

我需要使用corb来生成报告。MarkLogic Xquery

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。我需要将其传递给我的process.xqyreturn (count($uris), $uris)

我想知道如何获得所有$ A,$ B,$ C的计数以及对$ A,$ B,$ C的所有URI进行连接。

请帮

+0

你要遍历Col1中值,而不是URI的。 Corb允许你将Col1的值返回,就好像它们是uris一样吗?如果您然后在col1上进行cts:search,您可以在与该记录相关的一次打击中获得所有文档,并且可以构建您的报告所需的记录。否则它变得有点复杂.. – grtjn

+0

感谢您的回复。不幸的是,你的建议只适用于一小部分记录。当我尝试用A,B,C ..ML中的每个节点创建xml元素都不起作用。因此CoRB。而且,我相信CoRB需要将URI提供给Process.xqy – Bharadwaj

+1

你试过了吗? ;-) – grtjn

回答

0

如果你有一个非常大的URI集合,那么你可能要启用DISK-队列选项。

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

如果你需要得到一组不同的URI在你的输出,你可以返回所有的URI考生的处理模块中,让CORB做移除重复使用EXPORT-FILE-SORT=ascending|distinct选项与ExportBatchToFileTask

实例的属性使这些选项:

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