Package org.apache.solr.parser
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.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
SolrQueryParserBase.MagicFieldName
Identifies the list of all known "magic fields" that trigger special parsing behaviorstatic class
SolrQueryParserBase.RawQuery
static class
SolrQueryParserBase.SynonymQueryStyle
Query strategy when analyzed query terms overlap the same position (ie synonyms) consider if pants and khakis are query time synonyms
-
Field Summary
Fields Modifier and Type Field Description static QueryParser.Operator
AND_OPERATOR
Alternative form of QueryParser.Operator.ANDprotected String
explicitField
protected QueryParser.Operator
operator
The default operator that parser uses to combine query termsstatic QueryParser.Operator
OR_OPERATOR
Alternative form of QueryParser.Operator.ORprotected QParser
parser
protected static String
REVERSE_WILDCARD_LOWER_BOUND
protected IndexSchema
schema
protected SolrQueryParserBase.SynonymQueryStyle
synonymQueryStyle
static int
TERMS_QUERY_THRESHOLD
-
Constructor Summary
Constructors Modifier Constructor Description protected
SolrQueryParserBase()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected void
addClause(List<org.apache.lucene.search.BooleanClause> clauses, int conj, int mods, org.apache.lucene.search.Query q)
protected void
addMultiTermClause(List<org.apache.lucene.search.BooleanClause> clauses, org.apache.lucene.search.Query q)
Called from QueryParser's MultiTerm rule.protected String
analyzeIfMultitermTermText(String field, String part, FieldType fieldType)
static String
escape(String s)
Returns a String where those characters that QueryParser expects to be escaped are escaped by a preceding\
.boolean
getAllowLeadingWildcard()
boolean
getAutoGeneratePhraseQueries()
protected org.apache.lucene.search.Query
getBooleanQuery(List<org.apache.lucene.search.BooleanClause> clauses)
Factory method for generating query, given a set of clauses.String
getDefaultField()
QueryParser.Operator
getDefaultOperator()
Gets implicit operator setting, which will be either AND_OPERATOR or OR_OPERATOR.protected org.apache.lucene.search.Query
getExistenceQuery(String field)
String
getExplicitField()
For a fielded query, returns the actual field specified (i.e.String
getField(String fieldName)
Handles the default field if null is passedprotected org.apache.lucene.search.Query
getFieldQuery(String field, String queryText, boolean quoted)
protected org.apache.lucene.search.Query
getFieldQuery(String field, String queryText, boolean quoted, boolean raw)
protected org.apache.lucene.search.Query
getFieldQuery(String field, String queryText, int slop)
Base implementation delegates togetFieldQuery(String,String,boolean,boolean)
.protected org.apache.lucene.search.Query
getFieldQuery(String field, List<String> queryTerms, boolean raw)
float
getFuzzyMinSim()
Get the minimal similarity for fuzzy queries.int
getFuzzyPrefixLength()
Get the prefix length for fuzzy queries.protected org.apache.lucene.search.Query
getFuzzyQuery(String field, String termStr, float minSimilarity)
protected org.apache.lucene.search.Query
getLocalParams(String qfield, String lparams)
org.apache.lucene.search.MultiTermQuery.RewriteMethod
getMultiTermRewriteMethod()
int
getPhraseSlop()
Gets the default slop for phrases.protected org.apache.lucene.search.Query
getPrefixQuery(String field, String termStr)
protected org.apache.lucene.search.Query
getRangeQuery(String field, String part1, String part2, boolean startInclusive, boolean endInclusive)
protected org.apache.lucene.search.Query
getRangeQueryImpl(String field, String part1, String part2, boolean startInclusive, boolean endInclusive)
protected org.apache.lucene.search.Query
getRegexpQuery(String field, String termStr)
protected ReversedWildcardFilterFactory
getReversedWildcardFilterFactory(FieldType fieldType)
SolrQueryParserBase.SynonymQueryStyle
getSynonymQueryStyle()
Gets how overlapping query terms should be scoredprotected org.apache.lucene.search.Query
getWildcardQuery(String field, String termStr)
void
init(String defaultField, QParser parser)
boolean
isAllowSubQueryParsing()
protected boolean
isRangeShouldBeProtectedFromReverse(String field, String part1)
protected org.apache.lucene.search.BooleanClause
newBooleanClause(org.apache.lucene.search.Query q, org.apache.lucene.search.BooleanClause.Occur occur)
Builds a new BooleanClause instanceprotected 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)
protected org.apache.lucene.search.Query
newFuzzyQuery(org.apache.lucene.index.Term term, float minimumSimilarity, int prefixLength)
Builds a new FuzzyQuery instanceprotected org.apache.lucene.search.Query
newGraphSynonymQuery(Iterator<org.apache.lucene.search.Query> sidePathQueriesIterator)
protected org.apache.lucene.search.Query
newMatchAllDocsQuery()
Builds a new MatchAllDocsQuery instanceprotected org.apache.lucene.search.Query
newPrefixQuery(org.apache.lucene.index.Term prefix)
Builds a new PrefixQuery instanceprotected org.apache.lucene.search.Query
newRegexpQuery(org.apache.lucene.index.Term regexp)
Builds a new RegexpQuery instanceprotected org.apache.lucene.search.Query
newSynonymQuery(String field, org.apache.lucene.util.QueryBuilder.TermAndBoost[] terms)
protected org.apache.lucene.search.Query
newWildcardQuery(org.apache.lucene.index.Term t)
Builds a new WildcardQuery instanceorg.apache.lucene.search.Query
parse(String query)
Parses a query string, returning aQuery
.abstract void
ReInit(org.apache.lucene.queryparser.charstream.CharStream stream)
void
setAllowLeadingWildcard(boolean allowLeadingWildcard)
Set totrue
to allow leading wildcard characters.void
setAllowSubQueryParsing(boolean allowSubQueryParsing)
Set to enable subqueries to be parsed.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.void
setDefaultOperator(QueryParser.Operator op)
Sets the boolean operator of the QueryParser.void
setFuzzyMinSim(float fuzzyMinSim)
Set the minimum similarity for fuzzy queries.void
setFuzzyPrefixLength(int fuzzyPrefixLength)
Set the prefix length for fuzzy queries.void
setMultiTermRewriteMethod(org.apache.lucene.search.MultiTermQuery.RewriteMethod method)
By default QueryParser usesMultiTermQuery.CONSTANT_SCORE_REWRITE
when creating a PrefixQuery, WildcardQuery or RangeQuery.void
setPhraseSlop(int phraseSlop)
Sets the default slop for phrases.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 togetherabstract org.apache.lucene.search.Query
TopLevelQuery(String field)
-
Methods inherited from class org.apache.lucene.util.QueryBuilder
add, analyzeBoolean, analyzeGraphBoolean, analyzeGraphPhrase, analyzeMultiBoolean, analyzeMultiPhrase, analyzePhrase, analyzeTerm, createBooleanQuery, createBooleanQuery, createFieldQuery, createFieldQuery, createMinShouldMatchQuery, createPhraseQuery, createPhraseQuery, getAnalyzer, getAutoGenerateMultiTermSynonymsPhraseQuery, getEnableGraphQueries, getEnablePositionIncrements, newBooleanQuery, newMultiPhraseQueryBuilder, newTermQuery, setAnalyzer, setAutoGenerateMultiTermSynonymsPhraseQuery, setEnableGraphQueries, setEnablePositionIncrements
-
-
-
-
Field Detail
-
REVERSE_WILDCARD_LOWER_BOUND
protected static final String REVERSE_WILDCARD_LOWER_BOUND
-
TERMS_QUERY_THRESHOLD
public static final int TERMS_QUERY_THRESHOLD
- See Also:
- Constant Field Values
-
synonymQueryStyle
protected SolrQueryParserBase.SynonymQueryStyle synonymQueryStyle
-
AND_OPERATOR
public static final QueryParser.Operator AND_OPERATOR
Alternative form of QueryParser.Operator.AND
-
OR_OPERATOR
public static final QueryParser.Operator OR_OPERATOR
Alternative form of QueryParser.Operator.OR
-
operator
protected QueryParser.Operator operator
The default operator that parser uses to combine query terms
-
schema
protected IndexSchema schema
-
parser
protected QParser parser
-
explicitField
protected String explicitField
-
-
Method Detail
-
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
-
parse
public org.apache.lucene.search.Query parse(String query) throws SyntaxError
Parses a query string, returning aQuery
.- Parameters:
query
- the query string to be parsed.- Throws:
SyntaxError
-
getDefaultField
public String getDefaultField()
- Returns:
- Returns the default field.
-
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(boolean)
-
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:
setAllowLeadingWildcard(boolean)
-
setAllowSubQueryParsing
public void setAllowSubQueryParsing(boolean allowSubQueryParsing)
Set to enable subqueries to be parsed. If now allowed, the default, aSyntaxError
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 totrue
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:
setAllowLeadingWildcard(boolean)
-
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 examplecapital of Hungary
is equal tocapital OR of OR Hungary
.
InAND_OPERATOR
mode terms are considered to be in conjunction: the above mentioned query is parsed ascapital 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 usesMultiTermQuery.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()
-
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 togetFieldQuery(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 queryoccur
- 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 classorg.apache.lucene.util.QueryBuilder
-
newSynonymQuery
protected org.apache.lucene.search.Query newSynonymQuery(String field, org.apache.lucene.util.QueryBuilder.TermAndBoost[] terms)
- Overrides:
newSynonymQuery
in classorg.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
- TermminimumSimilarity
- minimum similarityprefixLength
- 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 containsBooleanClause
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
-
-