Class SolrQueryParserBase

java.lang.Object
org.apache.lucene.util.QueryBuilder
org.apache.solr.parser.SolrQueryParserBase
Direct Known Subclasses:
QueryParser

public abstract class SolrQueryParserBase extends org.apache.lucene.util.QueryBuilder
This class is overridden by QueryParser in QueryParser.jj and acts to separate the majority of the Java code from the .jj grammar file.
  • Field Details

  • Constructor Details

    • SolrQueryParserBase

      protected SolrQueryParserBase()
  • Method Details

    • ReInit

      public abstract void ReInit(org.apache.lucene.queryparser.charstream.CharStream stream)
    • TopLevelQuery

      public abstract org.apache.lucene.search.Query TopLevelQuery(String field) throws ParseException, SyntaxError
      Throws:
      ParseException
      SyntaxError
    • init

      public void init(String defaultField, QParser parser)
    • parse

      public org.apache.lucene.search.Query parse(String query) throws SyntaxError
      Parses a query string, returning a Query.
      Parameters:
      query - the query string to be parsed.
      Throws:
      SyntaxError
    • getDefaultField

      public String getDefaultField()
      Returns:
      Returns the default field.
    • getField

      public String getField(String fieldName)
      Handles the default field if null is passed
    • getExplicitField

      public String getExplicitField()
      For a fielded query, returns the actual field specified (i.e. null if default is being used) myfield:A or myfield:(A B C) will both return "myfield"
    • getAutoGeneratePhraseQueries

      public final boolean getAutoGeneratePhraseQueries()
      See Also:
    • setAutoGeneratePhraseQueries

      public final void setAutoGeneratePhraseQueries(boolean value)
      Set to true if phrase queries will be automatically generated when the analyzer returns more than one term from whitespace delimited text. NOTE: this behavior may not be suitable for all languages.

      Set to false if phrase queries should only be generated when surrounded by double quotes.

    • getFuzzyMinSim

      public float getFuzzyMinSim()
      Get the minimal similarity for fuzzy queries.
    • setFuzzyMinSim

      public void setFuzzyMinSim(float fuzzyMinSim)
      Set the minimum similarity for fuzzy queries. Default is 2f.
    • getFuzzyPrefixLength

      public int getFuzzyPrefixLength()
      Get the prefix length for fuzzy queries.
      Returns:
      Returns the fuzzyPrefixLength.
    • setFuzzyPrefixLength

      public void setFuzzyPrefixLength(int fuzzyPrefixLength)
      Set the prefix length for fuzzy queries. Default is 0.
      Parameters:
      fuzzyPrefixLength - The fuzzyPrefixLength to set.
    • setPhraseSlop

      public void setPhraseSlop(int phraseSlop)
      Sets the default slop for phrases. If zero, then exact phrase matches are required. Default value is zero.
    • getPhraseSlop

      public int getPhraseSlop()
      Gets the default slop for phrases.
    • isAllowSubQueryParsing

      public boolean isAllowSubQueryParsing()
      See Also:
    • setAllowSubQueryParsing

      public void setAllowSubQueryParsing(boolean allowSubQueryParsing)
      Set to enable subqueries to be parsed. If now allowed, the default, a SyntaxError will likely be thrown. Here is the preferred syntax using local-params: {!prefix f=field v=foo} and here is the older one, using a magic field name: _query_:"{!prefix f=field v=foo}".
    • setSynonymQueryStyle

      public void setSynonymQueryStyle(SolrQueryParserBase.SynonymQueryStyle synonymQueryStyle)
      Set how overlapping query terms (ie synonyms) should be scored, as if they're the same term, picking highest scoring term, or OR'ing them together
      Parameters:
      synonymQueryStyle - how to score terms that overlap see {SolrQueryParserBase.SynonymQueryStyle}
    • getSynonymQueryStyle

      public SolrQueryParserBase.SynonymQueryStyle getSynonymQueryStyle()
      Gets how overlapping query terms should be scored
    • setAllowLeadingWildcard

      public void setAllowLeadingWildcard(boolean allowLeadingWildcard)
      Set to true to allow leading wildcard characters.

      When set, * or ? are allowed as the first character of a PrefixQuery and WildcardQuery. Note that this can produce very slow queries on big indexes.

      Default: false.

    • getAllowLeadingWildcard

      public boolean getAllowLeadingWildcard()
      See Also:
    • setDefaultOperator

      public void setDefaultOperator(QueryParser.Operator op)
      Sets the boolean operator of the QueryParser. In default mode (OR_OPERATOR) terms without any modifiers are considered optional: for example capital of Hungary is equal to capital OR of OR Hungary.
      In AND_OPERATOR mode terms are considered to be in conjunction: the above mentioned query is parsed as capital AND of AND Hungary
    • getDefaultOperator

      public QueryParser.Operator getDefaultOperator()
      Gets implicit operator setting, which will be either AND_OPERATOR or OR_OPERATOR.
    • setMultiTermRewriteMethod

      public void setMultiTermRewriteMethod(org.apache.lucene.search.MultiTermQuery.RewriteMethod method)
      By default QueryParser uses MultiTermQuery.CONSTANT_SCORE_REWRITE when creating a PrefixQuery, WildcardQuery or RangeQuery. This implementation is generally preferable because it a) Runs faster b) Does not have the scarcity of terms unduly influence score c) avoids any "TooManyBooleanClauses" exception. However, if your application really needs to use the old-fashioned BooleanQuery expansion rewriting and the above points are not relevant then use this to change the rewrite method.
    • getMultiTermRewriteMethod

      public org.apache.lucene.search.MultiTermQuery.RewriteMethod getMultiTermRewriteMethod()
      See Also:
    • addClause

      protected void addClause(List<org.apache.lucene.search.BooleanClause> clauses, int conj, int mods, org.apache.lucene.search.Query q)
    • addMultiTermClause

      protected void addMultiTermClause(List<org.apache.lucene.search.BooleanClause> clauses, org.apache.lucene.search.Query q)
      Called from QueryParser's MultiTerm rule. Assumption: no conjunction or modifiers (conj == CONJ_NONE and mods == MOD_NONE)
    • newFieldQuery

      protected org.apache.lucene.search.Query newFieldQuery(org.apache.lucene.analysis.Analyzer analyzer, String field, String queryText, boolean quoted, boolean fieldAutoGenPhraseQueries, boolean fieldEnableGraphQueries, SolrQueryParserBase.SynonymQueryStyle synonymQueryStyle) throws SyntaxError
      Throws:
      SyntaxError
    • getFieldQuery

      protected org.apache.lucene.search.Query getFieldQuery(String field, String queryText, int slop) throws SyntaxError
      Base implementation delegates to getFieldQuery(String,String,boolean,boolean). This method may be overridden, for example, to return a SpanNearQuery instead of a PhraseQuery.
      Throws:
      SyntaxError
    • newBooleanClause

      protected org.apache.lucene.search.BooleanClause newBooleanClause(org.apache.lucene.search.Query q, org.apache.lucene.search.BooleanClause.Occur occur)
      Builds a new BooleanClause instance
      Parameters:
      q - sub query
      occur - how this clause should occur when matching documents
      Returns:
      new BooleanClause instance
    • newPrefixQuery

      protected org.apache.lucene.search.Query newPrefixQuery(org.apache.lucene.index.Term prefix)
      Builds a new PrefixQuery instance
      Parameters:
      prefix - Prefix term
      Returns:
      new PrefixQuery instance
    • newRegexpQuery

      protected org.apache.lucene.search.Query newRegexpQuery(org.apache.lucene.index.Term regexp)
      Builds a new RegexpQuery instance
      Parameters:
      regexp - Regexp term
      Returns:
      new RegexpQuery instance
    • newGraphSynonymQuery

      protected org.apache.lucene.search.Query newGraphSynonymQuery(Iterator<org.apache.lucene.search.Query> sidePathQueriesIterator)
      Overrides:
      newGraphSynonymQuery in class org.apache.lucene.util.QueryBuilder
    • newSynonymQuery

      protected org.apache.lucene.search.Query newSynonymQuery(String field, org.apache.lucene.util.QueryBuilder.TermAndBoost[] terms)
      Overrides:
      newSynonymQuery in class org.apache.lucene.util.QueryBuilder
    • newFuzzyQuery

      protected org.apache.lucene.search.Query newFuzzyQuery(org.apache.lucene.index.Term term, float minimumSimilarity, int prefixLength)
      Builds a new FuzzyQuery instance
      Parameters:
      term - Term
      minimumSimilarity - minimum similarity
      prefixLength - prefix length
      Returns:
      new FuzzyQuery Instance
    • newMatchAllDocsQuery

      protected org.apache.lucene.search.Query newMatchAllDocsQuery()
      Builds a new MatchAllDocsQuery instance
      Returns:
      new MatchAllDocsQuery instance
    • newWildcardQuery

      protected org.apache.lucene.search.Query newWildcardQuery(org.apache.lucene.index.Term t)
      Builds a new WildcardQuery instance
      Parameters:
      t - wildcard term
      Returns:
      new WildcardQuery instance
    • getBooleanQuery

      protected org.apache.lucene.search.Query getBooleanQuery(List<org.apache.lucene.search.BooleanClause> clauses) throws SyntaxError
      Factory method for generating query, given a set of clauses. By default creates a boolean query composed of clauses passed in.

      Can be overridden by extending classes, to modify query being returned.

      Parameters:
      clauses - List that contains BooleanClause instances to join.
      Returns:
      Resulting Query object.
      Throws:
      SyntaxError
    • escape

      public static String escape(String s)
      Returns a String where those characters that QueryParser expects to be escaped are escaped by a preceding \.
    • getReversedWildcardFilterFactory

      protected ReversedWildcardFilterFactory getReversedWildcardFilterFactory(FieldType fieldType)
    • analyzeIfMultitermTermText

      protected String analyzeIfMultitermTermText(String field, String part, FieldType fieldType)
    • getFieldQuery

      protected org.apache.lucene.search.Query getFieldQuery(String field, String queryText, boolean quoted) throws SyntaxError
      Throws:
      SyntaxError
    • getFieldQuery

      protected org.apache.lucene.search.Query getFieldQuery(String field, String queryText, boolean quoted, boolean raw) throws SyntaxError
      Throws:
      SyntaxError
    • getFieldQuery

      protected org.apache.lucene.search.Query getFieldQuery(String field, List<String> queryTerms, boolean raw) throws SyntaxError
      Throws:
      SyntaxError
    • isRangeShouldBeProtectedFromReverse

      protected boolean isRangeShouldBeProtectedFromReverse(String field, String part1)
    • getRangeQuery

      protected org.apache.lucene.search.Query getRangeQuery(String field, String part1, String part2, boolean startInclusive, boolean endInclusive) throws SyntaxError
      Throws:
      SyntaxError
    • getRangeQueryImpl

      protected org.apache.lucene.search.Query getRangeQueryImpl(String field, String part1, String part2, boolean startInclusive, boolean endInclusive) throws SyntaxError
      Throws:
      SyntaxError
    • getPrefixQuery

      protected org.apache.lucene.search.Query getPrefixQuery(String field, String termStr) throws SyntaxError
      Throws:
      SyntaxError
    • getExistenceQuery

      protected org.apache.lucene.search.Query getExistenceQuery(String field)
    • getWildcardQuery

      protected org.apache.lucene.search.Query getWildcardQuery(String field, String termStr) throws SyntaxError
      Throws:
      SyntaxError
    • getRegexpQuery

      protected org.apache.lucene.search.Query getRegexpQuery(String field, String termStr) throws SyntaxError
      Throws:
      SyntaxError
    • getFuzzyQuery

      protected org.apache.lucene.search.Query getFuzzyQuery(String field, String termStr, float minSimilarity) throws SyntaxError
      Throws:
      SyntaxError
    • getLocalParams

      protected org.apache.lucene.search.Query getLocalParams(String qfield, String lparams) throws SyntaxError
      Throws:
      SyntaxError