cts:search
関数がプログラムによって実行されるデータベースを変更するにはどうすればよいですか?MarkLogic 8 - XQuery - cts:search - プログラムでデータベースを変更します
今は質問コンソールです。
cts:search
関数がプログラムによって実行されるデータベースを変更するにはどうすればよいですか?MarkLogic 8 - XQuery - cts:search - プログラムでデータベースを変更します
今は質問コンソールです。
あなたはおそらくオプションの引数を受け入れる、xdmp:eval
を使用する必要がありますし、そこにデータベースを指定することができます。
xdmp:eval("cts:search(...)", (),
<options xmlns="xdmp:eval">
<database>{xdmp:database("otherdb")}</database>
</options>)
が最低レベルで、xdmp:evalは、何が起こるか本当に最もおそらくインラインで書くのが最も簡単なクリーンなオプションはxdmp:invoke-functionであり、その中で無名関数を使うこともできます。この組み合わせにより、既存の変数を自然に使用することができます。さらに進めたい場合は、xdmp:apply(柔軟性を高めるため)を参照してください。
また、MarkLogic 8には、という新しいトランザクションタイプがあります。結果を待つ間(スポーンなし)に関数をインラインで呼び出すようにクリーンアップし、それ自身のトランザクションに持ちます。正しく使用されると、更新/挿入の結果は呼び出しコードでも使用できます。
のサンプルコードは、以下の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>)
これは良い答えはありませんが、それはおそらく唯一の正しいものです。私が知っている、照会するDBを指定する唯一のオプションは 'xdmp:eval'ファミリー、' xdmp:invoke'ファミリー、 'xdmp:spawn'ファミリーです。 – CtheGood