## org.apache.lucene.queryParser.ext
Class ExtendableQueryParser

    java.lang.Object
      org.apache.lucene.queryParser.QueryParser
          org.apache.lucene.queryParser.ext.ExtendableQueryParser

All Implemented Interfaces:
  org.apache.lucene.queryParser.QueryParserConstants

    public class ExtendableQueryParser

extends org.apache.lucene.queryParser.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
`org.apache.lucene.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, BAREOPER, 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(org.apache.lucene.util.Version matchVersion, String f, org.apache.lucene.analysis.Analyzer a)` Creates a new `ExtendableQueryParser` instance
`ExtendableQueryParser(org.apache.lucene.util.Version matchVersion, String f, org.apache.lucene.analysis.Analyzer a, Extensions ext)` Creates a new `ExtendableQueryParser` instance

Method Summary
`char` `getExtensionFieldDelimiter()` Returns the extension field delimiter character.
`protected org.apache.lucene.search.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(org.apache.lucene.util.Version matchVersion,
                                 String f,
                                 org.apache.lucene.analysis.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(org.apache.lucene.util.Version matchVersion,
                                 String f,
                                 org.apache.lucene.analysis.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 org.apache.lucene.search.Query getFieldQuery(String field,
                                                           String queryText,
                                                           boolean quoted)
                                                    throws org.apache.lucene.queryParser.ParseException

  Overrides:
    `getFieldQuery` in class `org.apache.lucene.queryParser.QueryParser`
  Throws:
    `org.apache.lucene.queryParser.ParseException`