Class QueryBuilder


  • public class QueryBuilder
    extends 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​(String field,
                                        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​(String field,
                                        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​(String field,
                                       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​(String field,
                                       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​(String field,
                                               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
      • 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,
                                         String field,
                                         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).
        WARNING: This API is experimental and might change in incompatible ways in the next release.
      • getEnableGraphQueries

        public boolean getEnableGraphQueries()
        Returns true if graph TokenStream processing is enabled (default).
        WARNING: This API is experimental and might change in incompatible ways in the next release.
      • createFieldQuery

        protected Query createFieldQuery​(TokenStream source,
                                         BooleanClause.Occur operator,
                                         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,
                                            String field)
                                     throws 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:
        IOException
      • analyzeGraphBoolean

        protected Query analyzeGraphBoolean​(String field,
                                            TokenStream source,
                                            BooleanClause.Occur operator)
                                     throws 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:
        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​(Term[] 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​(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)
        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