Loading TOC...

cts:not-query

cts:not-query(
   $query as cts:query
) as cts:not-query

Summary

Returns a query specifying the matches not specified by its sub-query.

Parameters
query A negative query, specifying the search results to filter out.

Usage Notes

The cts:not-query constructor is fragment-based, so it returns true only if the specified query does not produce a match anywhere in a fragment. Therefore, a search using cts:not-query is only guaranteed to be accurate if the underlying query that is being negated is accurate from its index resolution (that is, if the unfiltered results of the $query parameter to cts:not-query are accurate). The accuracy of the index resolution depends on the many factors such as the query, if 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 $query parameter has false-positive matches, the negation of the query can miss matches (have false negative matches). In these cases, searches with cts:not-query can miss results, even if those searches are filtered.

Example

  cts:search(//PLAY,
    cts:not-query(
      cts:word-query("summer")))
  => ...  sequence of 'PLAY' elements not containing
          any text node with the word 'summer'.

Example

let $doc :=
  <doc>
   <p n="1">Dogs, cats, and pigs</p>
   <p n="2">Trees, frogs, and cats</p>
   <p n="3">Dogs, alligators, and wolves</p>
  </doc>
return
$doc//p[cts:contains(., cts:not-query("cat"))]
(: Returns the third p element (the one without
   a "cat" term). Note that the
   cts:contains forces the constraint to happen
   in the filtering stage of the query. :)

Stack Overflow iconStack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.