public class

QueryParser

extends Object
implements QueryParserConstants
java.lang.Object
   ↳ org.apache.lucene.queryParser.QueryParser
Known Direct Subclasses

Class Overview

This class is generated by JavaCC. The most important method is parse(String). The syntax for query strings is as follows: A Query is a series of clauses. A clause may be prefixed by:

  • a plus (+) or a minus (-) sign, indicating that the clause is required or prohibited respectively; or
  • a term followed by a colon, indicating the field to be searched. This enables one to construct queries which search multiple fields.
A clause may be either:
  • a term, indicating all the documents that contain this term; or
  • a nested query, enclosed in parentheses. Note that this may be used with a +/- prefix to require any of a set of terms.
Thus, in BNF, the query grammar is:
   Query  ::= ( Clause )*
   Clause ::= ["+", "-"] [<TERM> ":"] ( <TERM> | "(" Query ")" )
 

Examples of appropriately formatted queries can be found in the query syntax documentation.

In TermRangeQuerys, QueryParser tries to detect date values, e.g. date:[6/1/2005 TO 6/4/2005] produces a range query that searches for "date" fields between 2005-06-01 and 2005-06-04. Note that the format of the accepted input depends on the locale. By default a date is converted into a search term using the deprecated DateField for compatibility reasons. To use the new DateTools to convert dates, a DateTools.Resolution has to be set.

The date resolution that shall be used for RangeQueries can be set using setDateResolution(DateTools.Resolution) or setDateResolution(String, DateTools.Resolution). The former sets the default date resolution for all fields, whereas the latter can be used to set field specific date resolutions. Field specific date resolutions take, if set, precedence over the default date resolution.

If you use neither DateField nor DateTools in your index, you can create your own query parser that inherits QueryParser and overwrites getRangeQuery(String, String, String, boolean) to use a different method for date conversion.

Note that QueryParser is not thread-safe.

NOTE: there is a new QueryParser in contrib, which matches the same syntax as this class, but is more modular, enabling substantial customization to how a query is created.

NOTE: You must specify the required Version compatibility when creating QueryParser:

Summary

Nested Classes
enum QueryParser.Operator The default operator for parsing queries. 
[Expand]
Inherited Constants
From interface org.apache.lucene.queryParser.QueryParserConstants
Fields
public static final QueryParser.Operator AND_OPERATOR Alternative form of QueryParser.Operator.AND
public static final QueryParser.Operator OR_OPERATOR Alternative form of QueryParser.Operator.OR
public Token jj_nt Next token.
public Token token Current token.
public QueryParserTokenManager token_source Generated Token Manager.
[Expand]
Inherited Fields
From interface org.apache.lucene.queryParser.QueryParserConstants
Public Constructors
QueryParser(Version matchVersion, String f, Analyzer a)
Constructs a query parser.
Protected Constructors
QueryParser(CharStream stream)
Constructor with user supplied CharStream.
QueryParser(QueryParserTokenManager tm)
Constructor with generated Token Manager.
Public Methods
final Query Clause(String field)
final int Conjunction()
final int Modifiers()
final Query Query(String field)
void ReInit(CharStream stream)
Reinitialise.
void ReInit(QueryParserTokenManager tm)
Reinitialise.
final Query Term(String field)
final Query TopLevelQuery(String field)
final void disable_tracing()
Disable tracing.
final void enable_tracing()
Enable tracing.
static String escape(String s)
Returns a String where those characters that QueryParser expects to be escaped are escaped by a preceding \.
ParseException generateParseException()
Generate ParseException.
boolean getAllowLeadingWildcard()
Analyzer getAnalyzer()
DateTools.Resolution getDateResolution(String fieldName)
Returns the date resolution that is used by RangeQueries for the given field.
QueryParser.Operator getDefaultOperator()
Gets implicit operator setting, which will be either AND_OPERATOR or OR_OPERATOR.
boolean getEnablePositionIncrements()
String getField()
float getFuzzyMinSim()
Get the minimal similarity for fuzzy queries.
int getFuzzyPrefixLength()
Get the prefix length for fuzzy queries.
Locale getLocale()
Returns current locale, allowing access by subclasses.
boolean getLowercaseExpandedTerms()
MultiTermQuery.RewriteMethod getMultiTermRewriteMethod()
final Token getNextToken()
Get the next Token.
int getPhraseSlop()
Gets the default slop for phrases.
Collator getRangeCollator()
final Token getToken(int index)
Get the specific Token.
static void main(String[] args)
Command line tool to test QueryParser, using SimpleAnalyzer.
Query parse(String query)
Parses a query string, returning a Query.
void setAllowLeadingWildcard(boolean allowLeadingWildcard)
Set to true to allow leading wildcard characters.
void setDateResolution(DateTools.Resolution dateResolution)
Sets the default date resolution used by RangeQueries for fields for which no specific date resolutions has been set.
void setDateResolution(String fieldName, DateTools.Resolution dateResolution)
Sets the date resolution used by RangeQueries for a specific field.
void setDefaultOperator(QueryParser.Operator op)
Sets the boolean operator of the QueryParser.
void setEnablePositionIncrements(boolean enable)
Set to true to enable position increments in result query.
void setFuzzyMinSim(float fuzzyMinSim)
Set the minimum similarity for fuzzy queries.
void setFuzzyPrefixLength(int fuzzyPrefixLength)
Set the prefix length for fuzzy queries.
void setLocale(Locale locale)
Set locale used by date range parsing.
void setLowercaseExpandedTerms(boolean lowercaseExpandedTerms)
Whether terms of wildcard, prefix, fuzzy and range queries are to be automatically lower-cased or not.
void setMultiTermRewriteMethod(MultiTermQuery.RewriteMethod method)
By default QueryParser uses CONSTANT_SCORE_AUTO_REWRITE_DEFAULT when creating a PrefixQuery, WildcardQuery or RangeQuery.
void setPhraseSlop(int phraseSlop)
Sets the default slop for phrases.
void setRangeCollator(Collator rc)
Sets the collator used to determine index term inclusion in ranges for RangeQuerys.
Protected Methods
void addClause(List<BooleanClause> clauses, int conj, int mods, Query q)
Query getBooleanQuery(List<BooleanClause> clauses, boolean disableCoord)
Factory method for generating query, given a set of clauses.
Query getBooleanQuery(List<BooleanClause> clauses)
Factory method for generating query, given a set of clauses.
Query getFieldQuery(String field, String queryText)
Query getFieldQuery(String field, String queryText, int slop)
Base implementation delegates to getFieldQuery(String, String).
Query getFuzzyQuery(String field, String termStr, float minSimilarity)
Factory method for generating a query (similar to getWildcardQuery(String, String)).
Query getPrefixQuery(String field, String termStr)
Factory method for generating a query (similar to getWildcardQuery(String, String)).
Query getRangeQuery(String field, String part1, String part2, boolean inclusive)
Query getWildcardQuery(String field, String termStr)
Factory method for generating a query.
BooleanClause newBooleanClause(Query q, BooleanClause.Occur occur)
Builds a new BooleanClause instance
BooleanQuery newBooleanQuery(boolean disableCoord)
Builds a new BooleanQuery instance
Query newFuzzyQuery(Term term, float minimumSimilarity, int prefixLength)
Builds a new FuzzyQuery instance
Query newMatchAllDocsQuery()
Builds a new MatchAllDocsQuery instance
MultiPhraseQuery newMultiPhraseQuery()
Builds a new MultiPhraseQuery instance
PhraseQuery newPhraseQuery()
Builds a new PhraseQuery instance
Query newPrefixQuery(Term prefix)
Builds a new PrefixQuery instance
Query newRangeQuery(String field, String part1, String part2, boolean inclusive)
Builds a new TermRangeQuery instance
Query newTermQuery(Term term)
Builds a new TermQuery instance
Query newWildcardQuery(Term t)
Builds a new WildcardQuery instance
[Expand]
Inherited Methods
From class java.lang.Object

Fields

public static final QueryParser.Operator AND_OPERATOR

Alternative form of QueryParser.Operator.AND

public static final QueryParser.Operator OR_OPERATOR

Alternative form of QueryParser.Operator.OR

public Token jj_nt

Next token.

public Token token

Current token.

public QueryParserTokenManager token_source

Generated Token Manager.

Public Constructors

public QueryParser (Version matchVersion, String f, Analyzer a)

Constructs a query parser.

Parameters
matchVersion Lucene version to match. See above)
f the default field for query terms.
a used to find terms in the query text.

Protected Constructors

protected QueryParser (CharStream stream)

Constructor with user supplied CharStream.

protected QueryParser (QueryParserTokenManager tm)

Constructor with generated Token Manager.

Public Methods

public final Query Clause (String field)

public final int Conjunction ()

public final int Modifiers ()

public final Query Query (String field)

public void ReInit (CharStream stream)

Reinitialise.

public void ReInit (QueryParserTokenManager tm)

Reinitialise.

public final Query Term (String field)

public final Query TopLevelQuery (String field)

public final void disable_tracing ()

Disable tracing.

public final void enable_tracing ()

Enable tracing.

public static String escape (String s)

Returns a String where those characters that QueryParser expects to be escaped are escaped by a preceding \.

public ParseException generateParseException ()

Generate ParseException.

public boolean getAllowLeadingWildcard ()

public Analyzer getAnalyzer ()

Returns
  • Returns the analyzer.

public DateTools.Resolution getDateResolution (String fieldName)

Returns the date resolution that is used by RangeQueries for the given field. Returns null, if no default or field specific date resolution has been set for the given field.

public QueryParser.Operator getDefaultOperator ()

Gets implicit operator setting, which will be either AND_OPERATOR or OR_OPERATOR.

public boolean getEnablePositionIncrements ()

public String getField ()

Returns
  • Returns the field.

public float getFuzzyMinSim ()

Get the minimal similarity for fuzzy queries.

public int getFuzzyPrefixLength ()

Get the prefix length for fuzzy queries.

Returns
  • Returns the fuzzyPrefixLength.

public Locale getLocale ()

Returns current locale, allowing access by subclasses.

public boolean getLowercaseExpandedTerms ()

public final Token getNextToken ()

Get the next Token.

public int getPhraseSlop ()

Gets the default slop for phrases.

public Collator getRangeCollator ()

Returns
  • the collator used to determine index term inclusion in ranges for RangeQuerys.

public final Token getToken (int index)

Get the specific Token.

public static void main (String[] args)

Command line tool to test QueryParser, using SimpleAnalyzer. Usage:
java org.apache.lucene.queryParser.QueryParser <input>

Throws
Exception

public Query parse (String query)

Parses a query string, returning a Query.

Parameters
query the query string to be parsed.
Throws
ParseException if the parsing fails

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.

public void setDateResolution (DateTools.Resolution dateResolution)

Sets the default date resolution used by RangeQueries for fields for which no specific date resolutions has been set. Field specific resolutions can be set with setDateResolution(String, DateTools.Resolution).

Parameters
dateResolution the default date resolution to set

public void setDateResolution (String fieldName, DateTools.Resolution dateResolution)

Sets the date resolution used by RangeQueries for a specific field.

Parameters
fieldName field for which the date resolution is to be set
dateResolution date resolution to set

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

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: false.

public void setFuzzyMinSim (float fuzzyMinSim)

Set the minimum similarity for fuzzy queries. Default is 0.5f.

public void setFuzzyPrefixLength (int fuzzyPrefixLength)

Set the prefix length for fuzzy queries. Default is 0.

Parameters
fuzzyPrefixLength The fuzzyPrefixLength to set.

public void setLocale (Locale locale)

Set locale used by date range parsing.

public void setLowercaseExpandedTerms (boolean lowercaseExpandedTerms)

Whether terms of wildcard, prefix, fuzzy and range queries are to be automatically lower-cased or not. Default is true.

public void setMultiTermRewriteMethod (MultiTermQuery.RewriteMethod method)

By default QueryParser uses CONSTANT_SCORE_AUTO_REWRITE_DEFAULT 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.

public void setPhraseSlop (int phraseSlop)

Sets the default slop for phrases. If zero, then exact phrase matches are required. Default value is zero.

public void setRangeCollator (Collator rc)

Sets the collator used to determine index term inclusion in ranges for RangeQuerys.

WARNING: Setting the rangeCollator to a non-null collator using this method will cause every single index Term in the Field referenced by lowerTerm and/or upperTerm to be examined. Depending on the number of index Terms in this Field, the operation could be very slow.

Parameters
rc the collator to use when constructing RangeQuerys

Protected Methods

protected void addClause (List<BooleanClause> clauses, int conj, int mods, Query q)

protected Query getBooleanQuery (List<BooleanClause> clauses, boolean disableCoord)

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.
disableCoord true if coord scoring should be disabled.
Returns
Throws
ParseException throw in overridden method to disallow

protected Query getBooleanQuery (List<BooleanClause> clauses)

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
Throws
ParseException throw in overridden method to disallow

protected Query getFieldQuery (String field, String queryText)

Throws
ParseException throw in overridden method to disallow

protected Query getFieldQuery (String field, String queryText, int slop)

Base implementation delegates to getFieldQuery(String, String). This method may be overridden, for example, to return a SpanNearQuery instead of a PhraseQuery.

Throws
ParseException throw in overridden method to disallow

protected Query getFuzzyQuery (String field, String termStr, float minSimilarity)

Factory method for generating a query (similar to getWildcardQuery(String, String)). Called when parser parses an input term token that has the fuzzy suffix (~) appended.

Parameters
field Name of the field query will use.
termStr Term token to use for building term for the query
Returns
  • Resulting Query built for the term
Throws
ParseException throw in overridden method to disallow

protected Query getPrefixQuery (String field, String termStr)

Factory method for generating a query (similar to getWildcardQuery(String, String)). Called when parser parses an input term token that uses prefix notation; that is, contains a single '*' wildcard character as its last character. Since this is a special case of generic wildcard term, and such a query can be optimized easily, this usually results in a different query object.

Depending on settings, a prefix term may be lower-cased automatically. It will not go through the default Analyzer, however, since normal Analyzers are unlikely to work properly with wildcard templates.

Can be overridden by extending classes, to provide custom handling for wild card queries, which may be necessary due to missing analyzer calls.

Parameters
field Name of the field query will use.
termStr Term token to use for building term for the query (without trailing '*' character!)
Returns
  • Resulting Query built for the term
Throws
ParseException throw in overridden method to disallow

protected Query getRangeQuery (String field, String part1, String part2, boolean inclusive)

Throws
ParseException throw in overridden method to disallow

protected Query getWildcardQuery (String field, String termStr)

Factory method for generating a query. Called when parser parses an input term token that contains one or more wildcard characters (? and *), but is not a prefix term token (one that has just a single * character at the end)

Depending on settings, prefix term may be lower-cased automatically. It will not go through the default Analyzer, however, since normal Analyzers are unlikely to work properly with wildcard templates.

Can be overridden by extending classes, to provide custom handling for wildcard queries, which may be necessary due to missing analyzer calls.

Parameters
field Name of the field query will use.
termStr Term token that contains one or more wild card characters (? or *), but is not simple prefix term
Returns
  • Resulting Query built for the term
Throws
ParseException throw in overridden method to disallow

protected BooleanClause newBooleanClause (Query q, 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

protected BooleanQuery newBooleanQuery (boolean disableCoord)

Builds a new BooleanQuery instance

Parameters
disableCoord disable coord
Returns
  • new BooleanQuery instance

protected Query newFuzzyQuery (Term term, float minimumSimilarity, int prefixLength)

Builds a new FuzzyQuery instance

Parameters
term Term
minimumSimilarity minimum similarity
prefixLength prefix length
Returns
  • new FuzzyQuery Instance

protected Query newMatchAllDocsQuery ()

Builds a new MatchAllDocsQuery instance

Returns
  • new MatchAllDocsQuery instance

protected MultiPhraseQuery newMultiPhraseQuery ()

Builds a new MultiPhraseQuery instance

Returns
  • new MultiPhraseQuery instance

protected PhraseQuery newPhraseQuery ()

Builds a new PhraseQuery instance

Returns
  • new PhraseQuery instance

protected Query newPrefixQuery (Term prefix)

Builds a new PrefixQuery instance

Parameters
prefix Prefix term
Returns
  • new PrefixQuery instance

protected Query newRangeQuery (String field, String part1, String part2, boolean inclusive)

Builds a new TermRangeQuery instance

Parameters
field Field
part1 min
part2 max
inclusive true if range is inclusive
Returns
  • new TermRangeQuery instance

protected Query newTermQuery (Term term)

Builds a new TermQuery instance

Parameters
term term
Returns
  • new TermQuery instance

protected Query newWildcardQuery (Term t)

Builds a new WildcardQuery instance

Parameters
t wildcard term
Returns
  • new WildcardQuery instance