cts:and-not-query( $positive-query as cts:query, $negative-query as cts:query ) as cts:and-not-query
Returns a query specifying the set difference of the matches specified by two sub-queries.
Parameters | |
---|---|
positive-query | A positive query, specifying the search results filtered in. |
negative-query | A negative query, specifying the search results to filter out. |
cts:and-not-query
is only guaranteed to be accurate if the negative query is accurate from
its index resolution (that is, if the unfiltered results of the
negative query are accurate. The accuracy of the index resolution depends
on many factors such as the query, whether you search
at a fragment root (that is, if the first parameter of
cts:search
specifies an XPath that resolves to a fragment root),
the index options enabled on the database, the search options, and other
factors. In cases where the $negative-query
parameter has false
positive matches, the negation of the query can miss matches (have false
negative matches). In these cases, searches with
cts:and-not-query
can miss results, even if those searches are filtered.
cts:search(//PLAY, cts:and-not-query( cts:word-query("summer"), cts:word-query("glorious"))) => .. sequence of 'PLAY' elements containing some text node with the word 'summer' BUT NOT containing any text node with the word 'glorious'. This sequence may be (in fact is) non-empty, but certainly does not contain the PLAY element with: PLAY/TITLE = "The Tragedy of King Richard the Second" since this play contains both 'glorious' and 'summer'.
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.