小编Dav*_*nis的帖子

仅从 cts:reverse-query 返回 URI

更新:见结束 - 一个例子表明 cts:uris 不是一种有效的方法,因为它不会在所有情况下都返回正确的结果。

我有一个用例,在 MarkLogic 中,有时在包含 cts:reverse-query 的搜索结果中会有数十万个匹配项。有了这个,我想要返回的是与结果匹配的文档的 URI,以便我可以缓存它们并稍后通过 Corb2 处理它们。

示例代码:

xquery version "1.0-ml";


let $_ := xdmp:invoke-function(function(){
  for $val in ("foo", "bar", "baz")
    let $query := <query>{cts:element-word-query(xs:QName("what"), ($val))}</query>
    return (
              xdmp:document-insert("/test/reverse-" || $val ||".xml", $query, (), ("test-reverse")),
              xdmp:commit()
           )

},<options xmlns="xdmp:eval">
        <transaction-mode>update</transaction-mode>
      </options>
)


return for $result in cts:search(collection("test-reverse"), cts:reverse-query(<what>baz</what>))
  return xdmp:node-uri($result)
Run Code Online (Sandbox Code Playgroud)

这将返回:

/test/reverse-baz.xml
Run Code Online (Sandbox Code Playgroud)

这是预期的。

但是,我觉得我在这里做了太多处理,因为我已经有了来自 cts:search() 的文档。但话又说回来,因为 ML 是懒惰的,也许即使是现在,我真的只有一个参考,因为我没有访问文档中的任何内容..?

我想要的是使用 cts:uris() 来获得与上述相同的结果。但是,您不能将 cts:reverse-query 与 cts:uris() 一起使用

是的,我知道反向查询不一定需要作为文档存在于数据库中才能使用它(cts:包含示例),因此在某些用例中,URI 甚至不存在。但对我来说,他们做到了。

另外,我很确定我可以使用xdmp:plan()通过拉出最终计划 …

marklogic marklogic-8

2
推荐指数
1
解决办法
375
查看次数

标签 统计

marklogic ×1

marklogic-8 ×1