如何在 MarkLogic 中识别唯一匹配记录
How to identify unique matching records in MarkLogic
我的 MarkLogic 暂存数据库中有一百万 XML 个这样的文档。
<Details>
<Name>AA</Name>
<EmpId>123</EmpId>
<Account>
<AccountNo>111</AccountNo>
<IFSC>ABC</IFSC>
</Account>
<Account>
<AccountNo>222</AccountNo>
<IFSC>DEF</IFSC>
</Account>
</Details>
在此XML中,一名员工有多个帐号。由此,我想确定任何具有相同帐号的员工。从所有1M文件中找出唯一的帐号,然后检查帐号是否与多个员工ID匹配。
如何实现?
您可以列出出现在多个员工文档中的所有 AccountNo
值的一种方法是使用 cts:value-co-occurences()
method with references to an element range index of AccountNo
and cts:uri-reference()
(在启用 URI 词典时可用) . Return 结果作为映射,以 AccountNo
作为键,文档 URI(s) 作为值。然后过滤地图中的项目并报告哪些 AccountNo
与多个文档 URI 相关联。
let $accountNumber-to-URI :=
cts:value-co-occurrences(
cts:element-reference(xs:QName("AccountNo")),
cts:uri-reference(),
"map")
for $accountNumber in map:keys($accountNumber-to-URI)
where tail(map:get($accountNumber-to-URI, $accountNumber))
return $accountNumber
请注意,为了能够执行此操作,您需要在 AccountNo
元素上有一个范围索引。
我的 MarkLogic 暂存数据库中有一百万 XML 个这样的文档。
<Details>
<Name>AA</Name>
<EmpId>123</EmpId>
<Account>
<AccountNo>111</AccountNo>
<IFSC>ABC</IFSC>
</Account>
<Account>
<AccountNo>222</AccountNo>
<IFSC>DEF</IFSC>
</Account>
</Details>
在此XML中,一名员工有多个帐号。由此,我想确定任何具有相同帐号的员工。从所有1M文件中找出唯一的帐号,然后检查帐号是否与多个员工ID匹配。
如何实现?
您可以列出出现在多个员工文档中的所有 AccountNo
值的一种方法是使用 cts:value-co-occurences()
method with references to an element range index of AccountNo
and cts:uri-reference()
(在启用 URI 词典时可用) . Return 结果作为映射,以 AccountNo
作为键,文档 URI(s) 作为值。然后过滤地图中的项目并报告哪些 AccountNo
与多个文档 URI 相关联。
let $accountNumber-to-URI :=
cts:value-co-occurrences(
cts:element-reference(xs:QName("AccountNo")),
cts:uri-reference(),
"map")
for $accountNumber in map:keys($accountNumber-to-URI)
where tail(map:get($accountNumber-to-URI, $accountNumber))
return $accountNumber
请注意,为了能够执行此操作,您需要在 AccountNo
元素上有一个范围索引。