Class CompoundQuery


  • public class CompoundQuery
    extends Query
    A multi-clause query that merges the result sets of independent subqueries CompoundQuery wraps an arbitrary number of subqueries. Each clause is specified as a "must", "mustNot", or "should" - indicating how the subquery result set impacts the result set of the compound whole.
    • Constructor Detail

      • CompoundQuery

        public CompoundQuery​(java.lang.String minimumNumberShouldMatch,
                             java.util.List<Query> must,
                             java.util.List<Query> should,
                             java.util.List<Query> mustNot,
                             java.util.List<MinimumMatch> minimumMatch)
    • Method Detail

      • getMinimumNumberShouldMatch

        @Deprecated
        public java.lang.String getMinimumNumberShouldMatch()
        Deprecated.
      • setMinimumNumberShouldMatch

        @Deprecated
        public void setMinimumNumberShouldMatch​(java.lang.String minimumNumberShouldMatch)
        Deprecated.
      • getMust

        public java.util.List<Query> getMust()
        Returns:
        query clauses which need to be matched in order for a document to match the overall CompoundQuery
      • getShould

        public java.util.List<Query> getShould()
        Returns:
        query clauses which are preferable but not strictly required to match the overall CompoundQuery.

        When "must" clauses are present, "should" clauses primarily affect scoring (and as a result, default sorting). When "must" clauses are absent but "should" clauses are present, documents must match at least one "should" clause to be included in the overall result set.

      • getMustNot

        public java.util.List<Query> getMustNot()
        Returns:
        query clauses which disqualify documents from matching the overall CompoundQuery. Matching a single "mustNot" clause removes the document in question from the overall result set.

        If a CompoundQuery contains only "mustNot" queries, the overall results are computed as if a "must" MatchAllQuery was specified.

      • getMinimumMatch

        public java.util.List<MinimumMatch> getMinimumMatch()
      • setMinimumMatch

        public void setMinimumMatch​(java.util.List<MinimumMatch> minimumMatch)
      • getChildQueries

        public java.util.List<Query> getChildQueries()
        Description copied from class: Query
        Returns all the children of the query in question. The returned List is provided as a copy - changes made to it do not impact the originating Query object in any way.
        Specified by:
        getChildQueries in class Query
      • replaceChildQuery

        public boolean replaceChildQuery​(Query toReplace,
                                         Query replacement)
        Description copied from class: Query
        Swap 'replacement' in as a replacement, if 'toReplace' is currently a child of this Query object. Because a tree of Query objects might conceivably have repeated clauses, this method is implemented to test 'toReplace' using reference-equality instead of value-equality.
        Specified by:
        replaceChildQuery in class Query
        Returns:
        true if a replacement was made, false otherwise.
      • removeChildQuery

        public boolean removeChildQuery​(Query toRemove)
        Description copied from class: Query
        Remove 'toRemove', if 'toRemove' is currently a child of this Query object. Because a tree of Query objects might conceivably have repeated clauses, this method is implemented to test 'toRemove' using reference-equality instead of value-equality.
        Specified by:
        removeChildQuery in class Query
        Returns:
        true if a removal was made, false otherwise.
      • isEmptyQuery

        public boolean isEmptyQuery()
        Specified by:
        isEmptyQuery in class Query
        Returns:
        true if this query is now essentially "empty" (doesn't affect query logic at all) and can now be removed from the query tree. This can happen, for example, if all child queries were removed and the query logic depends on having at least one child query.