Class QueryBuilder

  • Direct Known Subclasses:
    QueryParserBase, SimpleQueryParser

    public class QueryBuilder
    extends java.lang.Object
    Creates queries from the Analyzer chain.

    Example usage:

       QueryBuilder builder = new QueryBuilder(analyzer);
       Query a = builder.createBooleanQuery("body", "just a test");
       Query b = builder.createPhraseQuery("body", "another test");
       Query c = builder.createMinShouldMatchQuery("body", "another test", 0.5f);
     

    This can also be used as a subclass for query parsers to make it easier to interact with the analysis chain. Factory methods such as newTermQuery are provided so that the generated queries can be customized.

    • Field Detail

      • enablePositionIncrements

        protected boolean enablePositionIncrements
      • enableGraphQueries

        protected boolean enableGraphQueries
      • autoGenerateMultiTermSynonymsPhraseQuery

        protected boolean autoGenerateMultiTermSynonymsPhraseQuery
    • Constructor Detail

      • QueryBuilder

        public QueryBuilder​(Analyzer analyzer)
        Creates a new QueryBuilder using the given analyzer.
    • Method Detail

      • createBooleanQuery

        public Query createBooleanQuery​(java.lang.String field,
                                        java.lang.String queryText)
        Creates a boolean query from the query text.

        This is equivalent to createBooleanQuery(field, queryText, Occur.SHOULD)

        Parameters:
        field - field name
        queryText - text to be passed to the analyzer
        Returns:
        TermQuery or BooleanQuery, based on the analysis of queryText
      • createBooleanQuery

        public Query createBooleanQuery​(java.lang.String field,
                                        java.lang.String queryText,
                                        BooleanClause.Occur operator)
        Creates a boolean query from the query text.

        Parameters:
        field - field name
        queryText - text to be passed to the analyzer
        operator - operator used for clauses between analyzer tokens.
        Returns:
        TermQuery or BooleanQuery, based on the analysis of queryText
      • createPhraseQuery

        public Query createPhraseQuery​(java.lang.String field,
                                       java.lang.String queryText)
        Creates a phrase query from the query text.

        This is equivalent to createPhraseQuery(field, queryText, 0)

        Parameters:
        field - field name
        queryText - text to be passed to the analyzer
        Returns:
        TermQuery, BooleanQuery, PhraseQuery, or MultiPhraseQuery, based on the analysis of queryText
      • createPhraseQuery

        public Query createPhraseQuery​(java.lang.String field,
                                       java.lang.String queryText,
                                       int phraseSlop)
        Creates a phrase query from the query text.

        Parameters:
        field - field name
        queryText - text to be passed to the analyzer
        phraseSlop - number of other words permitted between words in query phrase
        Returns:
        TermQuery, BooleanQuery, PhraseQuery, or MultiPhraseQuery, based on the analysis of queryText
      • createMinShouldMatchQuery

        public Query createMinShouldMatchQuery​(java.lang.String field,
                                               java.lang.String queryText,
                                               float fraction)
        Creates a minimum-should-match query from the query text.

        Parameters:
        field - field name
        queryText - text to be passed to the analyzer
        fraction - of query terms [0..1] that should match
        Returns:
        TermQuery or BooleanQuery, based on the analysis of queryText
      • addMinShouldMatchToBoolean

        private BooleanQuery addMinShouldMatchToBoolean​(BooleanQuery query,
                                                        float fraction)
        Rebuilds a boolean query and sets a new minimum number should match value.
      • setAnalyzer

        public void setAnalyzer​(Analyzer analyzer)
        Sets the analyzer used to tokenize text.
      • setEnablePositionIncrements

        public void setEnablePositionIncrements​(boolean enable)
        Set to true to enable position increments in result query.

        When set, result phrase and multi-phrase queries will be aware of position increments. Useful when e.g. a StopFilter increases the position increment of the token that follows an omitted token.

        Default: true.

      • getAutoGenerateMultiTermSynonymsPhraseQuery

        public boolean getAutoGenerateMultiTermSynonymsPhraseQuery()
        Returns true if phrase query should be automatically generated for multi terms synonyms.
        See Also:
        setAutoGenerateMultiTermSynonymsPhraseQuery(boolean)
      • setAutoGenerateMultiTermSynonymsPhraseQuery

        public void setAutoGenerateMultiTermSynonymsPhraseQuery​(boolean enable)
        Set to true if phrase queries should be automatically generated for multi terms synonyms. Default: false.
      • createFieldQuery

        protected Query createFieldQuery​(Analyzer analyzer,
                                         BooleanClause.Occur operator,
                                         java.lang.String field,
                                         java.lang.String queryText,
                                         boolean quoted,
                                         int phraseSlop)
        Creates a query from the analysis chain.

        Expert: this is more useful for subclasses such as queryparsers. If using this class directly, just use createBooleanQuery(String, String) and createPhraseQuery(String, String). This is a complex method and it is usually not necessary to override it in a subclass; instead, override methods like newBooleanQuery(), etc., if possible.

        Parameters:
        analyzer - analyzer used for this query
        operator - default boolean operator used for this query
        field - field to create queries against
        queryText - text to be passed to the analysis chain
        quoted - true if phrases should be generated when terms occur at more than one position
        phraseSlop - slop factor for phrase/multiphrase queries
      • setEnableGraphQueries

        public void setEnableGraphQueries​(boolean v)
        Enable or disable graph TokenStream processing (enabled by default).
      • getEnableGraphQueries

        public boolean getEnableGraphQueries()
        Returns true if graph TokenStream processing is enabled (default).
      • createFieldQuery

        protected Query createFieldQuery​(TokenStream source,
                                         BooleanClause.Occur operator,
                                         java.lang.String field,
                                         boolean quoted,
                                         int phraseSlop)
        Creates a query from a token stream.
        Parameters:
        source - the token stream to create the query from
        operator - default boolean operator used for this query
        field - field to create queries against
        quoted - true if phrases should be generated when terms occur at more than one position
        phraseSlop - slop factor for phrase/multiphrase queries
      • createSpanQuery

        protected SpanQuery createSpanQuery​(TokenStream in,
                                            java.lang.String field)
                                     throws java.io.IOException
        Creates a span query from the tokenstream. In the case of a single token, a simple SpanTermQuery is returned. When multiple tokens, an ordered SpanNearQuery with slop 0 is returned.
        Throws:
        java.io.IOException
      • analyzeTerm

        protected Query analyzeTerm​(java.lang.String field,
                                    TokenStream stream)
                             throws java.io.IOException
        Creates simple term query from the cached tokenstream contents
        Throws:
        java.io.IOException
      • analyzeBoolean

        protected Query analyzeBoolean​(java.lang.String field,
                                       TokenStream stream)
                                throws java.io.IOException
        Creates simple boolean query from the cached tokenstream contents
        Throws:
        java.io.IOException
      • analyzeMultiBoolean

        protected Query analyzeMultiBoolean​(java.lang.String field,
                                            TokenStream stream,
                                            BooleanClause.Occur operator)
                                     throws java.io.IOException
        Creates complex boolean query from the cached tokenstream contents
        Throws:
        java.io.IOException
      • analyzePhrase

        protected Query analyzePhrase​(java.lang.String field,
                                      TokenStream stream,
                                      int slop)
                               throws java.io.IOException
        Creates simple phrase query from the cached tokenstream contents
        Throws:
        java.io.IOException
      • analyzeMultiPhrase

        protected Query analyzeMultiPhrase​(java.lang.String field,
                                           TokenStream stream,
                                           int slop)
                                    throws java.io.IOException
        Creates complex phrase query from the cached tokenstream contents
        Throws:
        java.io.IOException
      • analyzeGraphBoolean

        protected Query analyzeGraphBoolean​(java.lang.String field,
                                            TokenStream source,
                                            BooleanClause.Occur operator)
                                     throws java.io.IOException
        Creates a boolean query from a graph token stream. The articulation points of the graph are visited in order and the queries created at each point are merged in the returned boolean query.
        Throws:
        java.io.IOException
      • analyzeGraphPhrase

        protected Query analyzeGraphPhrase​(TokenStream source,
                                           java.lang.String field,
                                           int phraseSlop)
                                    throws java.io.IOException
        Creates graph phrase query from the tokenstream contents
        Throws:
        java.io.IOException
      • newBooleanQuery

        protected BooleanQuery.Builder newBooleanQuery()
        Builds a new BooleanQuery instance.

        This is intended for subclasses that wish to customize the generated queries.

        Returns:
        new BooleanQuery instance
      • newSynonymQuery

        protected Query newSynonymQuery​(QueryBuilder.TermAndBoost[] terms)
        Builds a new SynonymQuery instance.

        This is intended for subclasses that wish to customize the generated queries.

        Returns:
        new Query instance
      • newGraphSynonymQuery

        protected Query newGraphSynonymQuery​(java.util.Iterator<Query> queries)
        Builds a new GraphQuery for multi-terms synonyms.

        This is intended for subclasses that wish to customize the generated queries.

        Returns:
        new Query instance
      • newTermQuery

        protected Query newTermQuery​(Term term,
                                     float boost)
        Builds a new TermQuery instance.

        This is intended for subclasses that wish to customize the generated queries.

        Parameters:
        term - term
        Returns:
        new TermQuery instance
      • newMultiPhraseQueryBuilder

        protected MultiPhraseQuery.Builder newMultiPhraseQueryBuilder()
        Builds a new MultiPhraseQuery instance.

        This is intended for subclasses that wish to customize the generated queries.

        Returns:
        new MultiPhraseQuery instance