如何更改cts:search
函数以编程方式运行的数据库?
现在我在查询控制台中。
答案 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>)