Interface LuceneQueryModifier

All Known Implementing Classes:

public interface LuceneQueryModifier

This class will clone the Query and add a MatchAllDocsQuery to 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 against. 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 BooleanClause.Occur.MUST_NOT is: Case 1: BooleanQuery contains only BooleanClause.Occur.MUST_NOT clauses THEN add a MatchAllDocsQuery Case 2: BooleanQuery contains at least one BooleanClause.Occur.MUST and no BooleanClause.Occur.SHOULD THEN do not add a MatchAllDocsQuery Case 3: BooleanQuery contains at least one BooleanClause.Occur.SHOULD THEN add a 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 MatchAllDocsQuery. NOTE: A BooleanQuery that contains at least one BooleanClause.Occur.MUST and at least one BooleanClause.Occur.SHOULD is the same as Case 2 since the MUST portion of the query will provide a positive set of results.


Method Summary getModifiedQuery( originalQuery)
          Will clone and rewrite the query as per the rules defined above.

Method Detail

getModifiedQuery getModifiedQuery( originalQuery)
Will clone and rewrite the query as per the rules defined above.

originalQuery - defines the lucene query to inspect, must not be null.
the modified query that will return the right results when run.

Copyright © 2002-2014 Atlassian. All Rights Reserved.