org.apache.lucene.queryParser.ext
Class ExtendableQueryParser

java.lang.Object
  extended by org.apache.lucene.queryParser.QueryParser
      extended by org.apache.lucene.queryParser.ext.ExtendableQueryParser
All Implemented Interfaces:
QueryParserConstants

public class ExtendableQueryParser
extends QueryParser

The ExtendableQueryParser enables arbitrary query parser extension based on a customizable field naming scheme. The lucene query syntax allows implicit and explicit field definitions as query prefix followed by a colon (':') character. The ExtendableQueryParser allows to encode extension keys into the field symbol associated with a registered instance of ParserExtension. A customizable separation character separates the extension key from the actual field symbol. The ExtendableQueryParser splits (@see Extensions.splitExtensionField(String, String)) the extension key from the field symbol and tries to resolve the associated ParserExtension. If the parser can't resolve the key or the field token does not contain a separation character, ExtendableQueryParser yields the same behavior as its super class QueryParser. Otherwise, if the key is associated with a ParserExtension instance, the parser builds an instance of ExtensionQuery to be processed by ParserExtension.parse(ExtensionQuery).If a extension field does not contain a field part the default field for the query will be used.

To guarantee that an extension field is processed with its associated extension, the extension query part must escape any special characters like '*' or '['. If the extension query contains any whitespace characters, the extension query part must be enclosed in quotes. Example ('_' used as separation character):

   title_customExt:"Apache Lucene\?" OR content_customExt:prefix\*
 
Search on the default field:
   _customExt:"Apache Lucene\?" OR _customExt:prefix\*
 

The ExtendableQueryParser itself does not implement the logic how field and extension key are separated or ordered. All logic regarding the extension key and field symbol parsing is located in Extensions. Customized extension schemes should be implemented by sub-classing Extensions.

For details about the default encoding scheme see Extensions.

See Also:
Extensions, ParserExtension, ExtensionQuery

Nested Class Summary
 
Nested classes/interfaces inherited from class org.apache.lucene.queryParser.QueryParser
QueryParser.Operator
 
Field Summary
 
Fields inherited from class org.apache.lucene.queryParser.QueryParser
AND_OPERATOR, jj_nt, OR_OPERATOR, token, token_source
 
Fields inherited from interface org.apache.lucene.queryParser.QueryParserConstants
_ESCAPED_CHAR, _NUM_CHAR, _QUOTED_CHAR, _TERM_CHAR, _TERM_START_CHAR, _WHITESPACE, AND, Boost, CARAT, COLON, DEFAULT, EOF, FUZZY_SLOP, LPAREN, MINUS, NOT, NUMBER, OR, PLUS, PREFIXTERM, QUOTED, RangeEx, RANGEEX_END, RANGEEX_GOOP, RANGEEX_QUOTED, RANGEEX_START, RANGEEX_TO, RangeIn, RANGEIN_END, RANGEIN_GOOP, RANGEIN_QUOTED, RANGEIN_START, RANGEIN_TO, RPAREN, STAR, TERM, tokenImage, WILDTERM
 
Constructor Summary
ExtendableQueryParser(Version matchVersion, String f, Analyzer a)
          Creates a new ExtendableQueryParser instance
ExtendableQueryParser(Version matchVersion, String f, Analyzer a, Extensions ext)
          Creates a new ExtendableQueryParser instance
 
Method Summary
 char getExtensionFieldDelimiter()
          Returns the extension field delimiter character.
protected  Query getFieldQuery(String field, String queryText, boolean quoted)
           
 
Methods inherited from class org.apache.lucene.queryParser.QueryParser
addClause, Clause, Conjunction, disable_tracing, enable_tracing, escape, generateParseException, getAllowLeadingWildcard, getAnalyzer, getAutoGeneratePhraseQueries, getBooleanQuery, getBooleanQuery, getDateResolution, getDefaultOperator, getEnablePositionIncrements, getField, getFieldQuery, getFieldQuery, getFuzzyMinSim, getFuzzyPrefixLength, getFuzzyQuery, getLocale, getLowercaseExpandedTerms, getMultiTermRewriteMethod, getNextToken, getPhraseSlop, getPrefixQuery, getRangeCollator, getRangeQuery, getToken, getWildcardQuery, main, Modifiers, newBooleanClause, newBooleanQuery, newFuzzyQuery, newMatchAllDocsQuery, newMultiPhraseQuery, newPhraseQuery, newPrefixQuery, newRangeQuery, newTermQuery, newWildcardQuery, parse, Query, ReInit, ReInit, setAllowLeadingWildcard, setAutoGeneratePhraseQueries, setDateResolution, setDateResolution, setDefaultOperator, setEnablePositionIncrements, setFuzzyMinSim, setFuzzyPrefixLength, setLocale, setLowercaseExpandedTerms, setMultiTermRewriteMethod, setPhraseSlop, setRangeCollator, Term, TopLevelQuery
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ExtendableQueryParser

public ExtendableQueryParser(Version matchVersion,
                             String f,
                             Analyzer a)
Creates a new ExtendableQueryParser instance

Parameters:
matchVersion - the lucene version to use.
f - the default query field
a - the analyzer used to find terms in a query string

ExtendableQueryParser

public ExtendableQueryParser(Version matchVersion,
                             String f,
                             Analyzer a,
                             Extensions ext)
Creates a new ExtendableQueryParser instance

Parameters:
matchVersion - the lucene version to use.
f - the default query field
a - the analyzer used to find terms in a query string
ext - the query parser extensions
Method Detail

getExtensionFieldDelimiter

public char getExtensionFieldDelimiter()
Returns the extension field delimiter character.

Returns:
the extension field delimiter character.

getFieldQuery

protected Query getFieldQuery(String field,
                              String queryText,
                              boolean quoted)
                       throws ParseException
Overrides:
getFieldQuery in class QueryParser
Throws:
ParseException - throw in overridden method to disallow