
cts.notInQuery( positive-query as cts.query, negative-query as cts.query ) as cts.notInQuery
Returns a query matching the first sub-query, where those matches do not occur within 0 distance of the other query.
| Parameters | |
|---|---|
| positive-query | A positive query, specifying the search results filtered in. |
| negative-query | A negative query, specifying the search results to filter out. |
Positions are required to accurately resolve this query from the indexes.
If you do not enable position indexes appropriate to the type of the
sub-queries, then you may get surprising results in unfiltered searches.
For example, if the sub queries are cts:word-query, then
you should enable word positions in the database.
False positives can occur if there are no positions available, such as when positions are not enabled. Filtered searches always have access to positions, but unfiltered searches do not.
Some query types are intrinsically positionless, such as
cts:collection-query or cts:directory-query.
Matches to such a query are considered to occur at every position and
causes the overall query to behave like cst:and-not-query.
If no position can be determined, such as when positions are not enabled,
then every match to $positive-query is a match for the
whole query.
cts.search(cts.notInQuery(
cts.wordQuery("nettles"),
cts.wordQuery("stinging nettles")))
=> A sequence of documents containing some text node
with the word 'nettles' where that occurrence is not in the
phrase 'stinging nettles'.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, while this play does contain 'nettles', it is only in the
phrase 'stinging nettles'. On the other hand, this play
will match the query:
cts.search(cts.notInQuery(
cts.wordQuery("summer"),
cts.wordQuery("summer corn")))
since, while the play does contain 'summer corn', it also contains 'summer'
in other contexts as well.
If word positions are not enabled, then an unfiltered search returns
all documents containing "nettles".
cts.search(cts.notInQuery(
cts.wordQuery("nettles"),
cts.collectionQuery("TRAGEDY")))
=> A sequence of documents containing some text node with
the word "nettles", excluding occurrences in documents in the
"TRAGEDY" collection. The collection query is intrinsically,
positionless, so the negative query matches overlap with every
match of the positive query.
Stack Overflow: Get the most useful answers to questions from the MarkLogic community, or ask your own question.