Come è possibile modificare il database in modo che una funzione cts:search
venga eseguita in modo programmatico?MarkLogic 8 - XQuery - cts: search - Cambia database a livello di programmazione
In questo momento sono nella console di query.
Come è possibile modificare il database in modo che una funzione cts:search
venga eseguita in modo programmatico?MarkLogic 8 - XQuery - cts: search - Cambia database a livello di programmazione
In questo momento sono nella console di query.
Si avrà probabilmente bisogno di usare xdmp:eval
, che accetta un argomento opzioni, e lì è possibile specificare il database:
xdmp:eval("cts:search(...)", (),
<options xmlns="xdmp:eval">
<database>{xdmp:database("otherdb")}</database>
</options>)
Anche se a livello più basso, xdmp: eval è davvero ciò che accade, il più l'opzione clean che è probabilmente la più semplice da scrivere in linea è xdmp:invoke-function - e potrebbe anche essere meglio usare anche una funzione anonima al suo interno. Questa combinazione consente l'uso naturale delle variabili esistenti. Se si vuole andare oltre, quindi anche guardare xdmp: applicare (per aggiungere più flexability)
Inoltre, a Mark Logic 8, v'è una nuova transazione di tipo chiamato update-auto-commit, che rende anche più bello e pulisci per invocare una funzione in linea, in attesa dei risultati (senza spawn) e averla nella propria transazione. Se usato correttamente, i risultati di un aggiornamento/inserimento sono persino disponibili nel codice chiamante.
L'esempio di codice qui sotto vale cts: ricerca contro un altro database e utilizza naturalmente le variabili nel codice principale:
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>)
questo non è solo una buona risposta, ma è probabilmente l'unico corretto. Le tue uniche opzioni di specificare quale DB interrogare, che io sappia, sono: 'famiglia xdmp: eval', famiglia' xdmp: invoke' e 'xdmp: spawn'. – CtheGood