
cts.reverseQuery( nodes as Node[], [weight as Number?] ) as cts.reverseQuery
Construct a query that matches serialized cts queries, based on a
set of model input nodes. A serialized query matches if it would
match the model nodes. Use with a cts.search or
cts.contains over serialized cts.query nodes.
A reverse query matches serialized cts:query nodes.
Construct a reverse query from nodes that model what that
serialized query should match, rather than passing in the target query.
For example, to match queries for the word "hello", specify a node
containing the word "hello" as the nodes parameter.
See the example, below. Reverse queries are useful for creating
alerting applications.
When evaluating a cts.reverseQuery on a
set of nodes, the cts.similarQuery or
cts.registeredQuery components of any stored query will
match all nodes.
You can serialize a cts.query to an in-memory JSON string
using xdmp.toJsonString. You can persist a serialized
cts.query as JSON document by converting the query to a
JavaScript object and passing the object to xdmp.documentInsert.
For example:
// Convert to a JSON string
xdmp.toJsonString(cts.wordQuery('hello'))
// Convert to JavaScript object and save in the database. The JS object
// is implicitly converted into a JSON object node by the call.
xdmp.documentInsert('/my/query.json', cts.wordQuery('hello').toObject());
A reverse query can match both the XML and JSON representations of a serialized query.
const query = cts.wordQuery('hello');
const modelNode = xdmp.toJSON({bar:"hello"});
cts.contains(
xdmp.toJSON(query.toObject()).root,
cts.reverseQuery(modelNode)
);
// Returns true because the content contains a cts:word-query
// for "hello", which would match the model node. Here, the content is
// an in-memory node, but it could also be a document (or node) in the
// database.
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.