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
RangeQuery
s, 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.
addClause
protected void addClause(Vector clauses,
int conj,
int mods,
Query q)
disable_tracing
public final void disable_tracing()
enable_tracing
public final void enable_tracing()
escape
public static String escape(String s)
Returns a String where those characters that QueryParser
expects to be escaped are escaped by a preceding \
.
getAllowLeadingWildcard
public boolean getAllowLeadingWildcard()
getAnalyzer
public Analyzer getAnalyzer()
getBooleanQuery
protected Query getBooleanQuery(Vector clauses)
throws ParseException
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.
getBooleanQuery
protected Query getBooleanQuery(Vector clauses,
boolean disableCoord)
throws ParseException
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.
clauses
- Vector that contains BooleanClause
instances
to join.disableCoord
- true if coord scoring should be disabled.
getDateResolution
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.
getDefaultOperator
public QueryParser.Operator getDefaultOperator()
Gets implicit operator setting, which will be either AND_OPERATOR
or OR_OPERATOR.
getField
public String getField()
getFieldQuery
protected Query getFieldQuery(String field,
String queryText)
throws ParseException
getFieldQuery
protected Query getFieldQuery(String field,
String queryText,
int slop)
throws ParseException
Base implementation delegates to
getFieldQuery(String,String)
.
This method may be overridden, for example, to return
a SpanNearQuery instead of a PhraseQuery.
getFuzzyMinSim
public float getFuzzyMinSim()
Get the minimal similarity for fuzzy queries.
getFuzzyPrefixLength
public int getFuzzyPrefixLength()
Get the prefix length for fuzzy queries.
- Returns the fuzzyPrefixLength.
getFuzzyQuery
protected Query getFuzzyQuery(String field,
String termStr,
float minSimilarity)
throws ParseException
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.
field
- Name of the field query will use.termStr
- Term token to use for building term for the query
- Resulting
Query
built for the term
getLocale
public Locale getLocale()
Returns current locale, allowing access by subclasses.
getLowercaseExpandedTerms
public boolean getLowercaseExpandedTerms()
getNextToken
public final Token getNextToken()
getPhraseSlop
public int getPhraseSlop()
Gets the default slop for phrases.
getPrefixQuery
protected Query getPrefixQuery(String field,
String termStr)
throws ParseException
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.
field
- Name of the field query will use.termStr
- Term token to use for building term for the query
(without trailing '*' character!)
- Resulting
Query
built for the term
getRangeQuery
protected Query getRangeQuery(String field,
String part1,
String part2,
boolean inclusive)
throws ParseException
getToken
public final Token getToken(int index)
getUseOldRangeQuery
public boolean getUseOldRangeQuery()
getWildcardQuery
protected Query getWildcardQuery(String field,
String termStr)
throws ParseException
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.
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
- Resulting
Query
built for the term
main
public static void main(String[] args)
throws Exception
Command line tool to test QueryParser, using
SimpleAnalyzer
.
Usage:
java org.apache.lucene.queryParser.QueryParser <input>
parse
public Query parse(String query)
throws ParseException
Parses a query string, returning a
Query
.
query
- the query string to be parsed.
setAllowLeadingWildcard
public void setAllowLeadingWildcard(boolean allowLeadingWildcard)
Set to true
to allow *
and ?
as the first character
of a PrefixQuery and WildcardQuery. Note that this can produce very slow
queries on big indexes. Default: false.
setDateResolution
public void setDateResolution(String fieldName,
DateTools.Resolution dateResolution)
Sets the date resolution used by RangeQueries for a specific field.
dateResolution
- date resolution to set
setDateResolution
public void setDateResolution(DateTools.Resolution dateResolution)
dateResolution
- the default date resolution to set
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 conjuction: the
above mentioned query is parsed as capital AND of AND Hungary
setFuzzyMinSim
public void setFuzzyMinSim(float fuzzyMinSim)
Set the minimum similarity for fuzzy queries.
Default is 0.5f.
setFuzzyPrefixLength
public void setFuzzyPrefixLength(int fuzzyPrefixLength)
Set the prefix length for fuzzy queries. Default is 0.
fuzzyPrefixLength
- The fuzzyPrefixLength to set.
setLocale
public void setLocale(Locale locale)
Set locale used by date range parsing.
setLowercaseExpandedTerms
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
.
setPhraseSlop
public void setPhraseSlop(int phraseSlop)
Sets the default slop for phrases. If zero, then exact phrase matches
are required. Default value is zero.
setUseOldRangeQuery
public void setUseOldRangeQuery(boolean useOldRangeQuery)
By default QueryParser uses new ConstantScoreRangeQuery in preference to RangeQuery
for range queries. This implementation is generally preferable because it
a) Runs faster b) Does not have the scarcity of range terms unduly influence score
c) avoids any "TooManyBooleanClauses" exception.
However, if your application really needs to use the old-fashioned RangeQuery and the above
points are not required then set this option to true
Default is false
.