Marklogic - 如果您知道 id,循环遍历 10,000 个文档的最佳方法是什么

Marklogic - What is the best way to loop throught 10 thousand documents if you know id

我有一个列表,超过一万个 id 需要检索 XML 数据,如果它们匹配。解决这个问题的最佳解决方案是什么。我认为我的代码不是遍历 $listKeyID 的正确方法。请帮忙。提前致谢。

let $listKeyID := ("accid01","accid02",......"accid100000") (: a huge list :)
let $uris := cts:uris((),
                      (),
                     cts:and-query((                          
                           cts:collection-query("/collection/TRIS"),
                           cts:or-query((
                           cts:field-word-query("key",($listKeyID))
                           ))
                     ))
                 )
             )
 return fn:count($uris)

其实这种做法并没有太大的错误。 cts:field-word-query 接受一个序列作为第二个参数,并且 return 对该序列中的任何匹配都是肯定的。我们也将其称为 shotgun-OR 查询,它非常高效。

虽然你真的不需要额外的 cts:or-query ,你可能想使用 cts:field-value-query 代替,它匹配整个键值,而不是中间句子标记,取决于您的用例。

let $listKeyIDs := (accid01,accid02,......accid100000) (: a huge list :)
let $uris := cts:uris(
    (),
    (),
    cts:and-query((
        cts:collection-query("/collection/TRIS"),
        cts:field-value-query("key", $listKeyIDs)
    ))
)
return fn:count($uris)

HTH!