MarkLogic 8 - XQuery - cts:search - 以编程方式更改数据库

时间:2016-01-12 16:25:54

标签: xquery marklogic

如何更改cts:search函数以编程方式运行的数据库?

现在我在查询控制台中。

2 个答案:

答案 0 :(得分:6)

您可能需要使用xdmp:eval,它接受​​一个options参数,并在那里指定数据库:

xdmp:eval("cts:search(...)",  (),
   <options xmlns="xdmp:eval">
     <database>{xdmp:database("otherdb")}</database>
   </options>)

答案 1 :(得分:2)

虽然在最低级别,xdmp:eval确实发生了什么,最简单的内联编写方式是xdmp:invoke-function - 最好也可能是在其中使用匿名函数。这种组合允许自然使用现有变量。如果你想更进一步,那么还要看xdmp:apply(增加更多的灵活性)

此外,在MarkLogic 8中,有一个名为 update-auto-commit 的新事务类型,它还可以在等待结果的同时调用内联函数,从而使其变得干净整洁(没有生成)并在自己的交易中拥有它。如果使用得当,则更新/插入的结果甚至可以在调用代码中使用。

下面的代码示例适用于cts:搜索另一个数据库和    自然地使用主代码中的变量:

xquery version "1.0-ml";
declare namespace html = "http://www.w3.org/1999/xhtml";

let $query := cts:word-query("foo")
let $start := 1
let $end := 3
let $database-name := "your-other-database-name-here"

 return
    xdmp:invoke-function(
      function() { 
          cts:search(doc(), $query)[$start to $end]        
      },
      <options xmlns="xdmp:eval">
        <database>{xdmp:database($database-name)}</database>
      </options>)