public interface LuceneQueryModifier
Queryand add a
MatchAllDocsQueryto the portion of the query that require them.
This inspects the query to determine if there are any nodes in the query that are marked as
BooleanClause.Occur.MUST_NOT AND they do not have a positive query to work
This is because Lucene will drop queries of this kind instead of trying to find the correct result.
When we specify a query that is -A || B lucene treats this as equivilent to B. When we specify this query what we mean is (-A && ALL_VALUES) || B which is obviously not equivilent to B.
The algorithm for determining if a
BooleanQuery should have a
MatchAllDocsQuery added to it with an occur of
Case 1: BooleanQuery contains only
BooleanClause.Occur.MUST_NOT clauses THEN add a
Case 2: BooleanQuery contains at least one
BooleanClause.Occur.MUST and no
BooleanClause.Occur.SHOULD THEN do not add a
Case 3: BooleanQuery contains at least one
MatchAllDocsQuery to each
BooleanClause.Occur.MUST_NOT portion of the query. This may mean that we need to
rewrite the a single term to be a BooleanQuery that contains the single term AND the
NOTE: A BooleanQuery that contains at least one
BooleanClause.Occur.MUST and at least
BooleanClause.Occur.SHOULD is the same as Case 2 since the MUST portion of the
query will provide a positive set of results.
org.apache.lucene.search.Query getModifiedQuery(org.apache.lucene.search.Query originalQuery)
originalQuery- defines the lucene query to inspect, must not be null.
Copyright © 2002-2016 Atlassian. All Rights Reserved.