Package org.apache.lucene.queryparser.simple

# Class SimpleQueryParser

java.lang.Object
org.apache.lucene.util.QueryBuilder
org.apache.lucene.queryparser.simple.SimpleQueryParser

public class SimpleQueryParser extends QueryBuilder
SimpleQueryParser is used to parse human readable query syntax.

The main idea behind this parser is that a person should be able to type whatever they want to represent a query, and this parser will do its best to interpret what to search for no matter how poorly composed the request may be. Tokens are considered to be any of a term, phrase, or subquery for the operations described below. Whitespace including ' ' '\n' '\r' and '\t' and certain operators may be used to delimit tokens ( ) + | " .

Any errors in query syntax will be ignored and the parser will attempt to decipher what it can; however, this may mean odd or unexpected results.

Query Operators

- '`+`' specifies `AND` operation: `token1+token2`
- '`|`' specifies `OR` operation: `token1|token2`
- '`-`' negates a single token: `-token0`
- '`"`' creates phrases of terms: `"term1 term2 ..."`
- '`*`' at the end of terms specifies prefix query: `term*`
- '`~`N' at the end of terms specifies fuzzy query: `term~1`
- '`~`N' at the end of phrases specifies near query: `"term1 term2"~5`
- '`(`' and '`)`' specifies precedence: `token1 + (token2 | token3)`

The `default operator` is `OR` if no other operator is specified. For example, the following will `OR` `token1` and `token2` together: `token1 token2`

Normal operator precedence will be simple order from right to left. For example, the following will evaluate `token1 OR token2` first, then `AND` with `token3`:

> token1 | token2 + token3

Escaping

An individual term may contain any possible character with certain characters requiring escaping using a '`\`'. The following characters will need to be escaped in terms and phrases: `+ | " ( ) ' \`

The '`-`' operator is a special case. On individual terms (not phrases) the first character of a term that is `-` must be escaped; however, any '`-`' characters beyond the first character do not need to be escaped. For example:

- `-term1` -- Specifies `NOT` operation against `term1`
- `\-term1` -- Searches for the term `-term1`.
- `term-1` -- Searches for the term `term-1`.
- `term\-1` -- Searches for the term `term-1`.

The '`*`' operator is a special case. On individual terms (not phrases) the last character of a term that is '`*`' must be escaped; however, any '`*`' characters before the last character do not need to be escaped:

- `term1*` -- Searches for the prefix `term1`
- `term1\*` -- Searches for the term `term1*`
- `term*1` -- Searches for the term `term*1`
- `term\*1` -- Searches for the term `term*1`

Note that above examples consider the terms before text processing.

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from class org.apache.lucene.util.QueryBuilder

  `QueryBuilder.TermAndBoost`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final int`
  `AND_OPERATOR`
  Enables `AND` operator (+)
  `static final int`
  `ESCAPE_OPERATOR`
  Enables `ESCAPE` operator (\)
  `protected final int`
  `flags`
  flags to the parser (to turn features on/off)
  `static final int`
  `FUZZY_OPERATOR`
  Enables `FUZZY` operators: (~) on single terms
  `static final int`
  `NEAR_OPERATOR`
  Enables `NEAR` operators: (~) on phrases
  `static final int`
  `NOT_OPERATOR`
  Enables `NOT` operator (-)
  `static final int`
  `OR_OPERATOR`
  Enables `OR` operator (|)
  `static final int`
  `PHRASE_OPERATOR`
  Enables `PHRASE` operator (")
  `static final int`
  `PRECEDENCE_OPERATORS`
  Enables `PRECEDENCE` operators: `(` and `)`
  `static final int`
  `PREFIX_OPERATOR`
  Enables `PREFIX` operator (*)
  `protected final Map<String,Float>`
  `weights`
  Map of fields to query against with their weights
  `static final int`
  `WHITESPACE_OPERATOR`
  Enables `WHITESPACE` operators: ' ' '\n' '\r' '\t'

  ### Fields inherited from class org.apache.lucene.util.QueryBuilder

  `analyzer, autoGenerateMultiTermSynonymsPhraseQuery, enableGraphQueries, enablePositionIncrements`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `SimpleQueryParser(Analyzer analyzer, String field)`
  Creates a new parser searching over a single field.
  `SimpleQueryParser(Analyzer analyzer, Map<String,Float> weights)`
  Creates a new parser searching over multiple fields with different weights.
  `SimpleQueryParser(Analyzer analyzer, Map<String,Float> weights, int flags)`
  Creates a new parser with custom flags used to enable/disable certain features.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `BooleanClause.Occur`
  `getDefaultOperator()`
  Returns the implicit operator setting, which will be either `SHOULD` or `MUST`.
  `protected Query`
  `newDefaultQuery(String text)`
  Factory method to generate a standard query (no phrase or prefix operators).
  `protected Query`
  `newFuzzyQuery(String text, int fuzziness)`
  Factory method to generate a fuzzy query.
  `protected Query`
  `newPhraseQuery(String text, int slop)`
  Factory method to generate a phrase query with slop.
  `protected Query`
  `newPrefixQuery(String text)`
  Factory method to generate a prefix query.
  `Query`
  `parse(String queryText)`
  Parses the query text and returns parsed query
  `void`
  `setDefaultOperator(BooleanClause.Occur operator)`
  Sets the implicit operator setting, which must be either `SHOULD` or `MUST`.
  `protected Query`
  `simplify(BooleanQuery bq)`
  Helper to simplify boolean queries with 0 or 1 clause

  ### 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, newGraphSynonymQuery, newMultiPhraseQueryBuilder, newSynonymQuery, newTermQuery, setAnalyzer, setAutoGenerateMultiTermSynonymsPhraseQuery, setEnableGraphQueries, setEnablePositionIncrements`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### weights

    protected final Map<String,Float> weights
    Map of fields to query against with their weights

  - ### flags

    protected final int flags
    flags to the parser (to turn features on/off)

  - ### AND_OPERATOR

    public static final int AND_OPERATOR
    Enables `AND` operator (+)
    See Also:
      - Constant Field Values

  - ### NOT_OPERATOR

    public static final int NOT_OPERATOR
    Enables `NOT` operator (-)
    See Also:
      - Constant Field Values

  - ### OR_OPERATOR

    public static final int OR_OPERATOR
    Enables `OR` operator (|)
    See Also:
      - Constant Field Values

  - ### PREFIX_OPERATOR

    public static final int PREFIX_OPERATOR
    Enables `PREFIX` operator (*)
    See Also:
      - Constant Field Values

  - ### PHRASE_OPERATOR

    public static final int PHRASE_OPERATOR
    Enables `PHRASE` operator (")
    See Also:
      - Constant Field Values

  - ### PRECEDENCE_OPERATORS

    public static final int PRECEDENCE_OPERATORS
    Enables `PRECEDENCE` operators: `(` and `)`
    See Also:
      - Constant Field Values

  - ### ESCAPE_OPERATOR

    public static final int ESCAPE_OPERATOR
    Enables `ESCAPE` operator (\)
    See Also:
      - Constant Field Values

  - ### WHITESPACE_OPERATOR

    public static final int WHITESPACE_OPERATOR
    Enables `WHITESPACE` operators: ' ' '\n' '\r' '\t'
    See Also:
      - Constant Field Values

  - ### FUZZY_OPERATOR

    public static final int FUZZY_OPERATOR
    Enables `FUZZY` operators: (~) on single terms
    See Also:
      - Constant Field Values

  - ### NEAR_OPERATOR

    public static final int NEAR_OPERATOR
    Enables `NEAR` operators: (~) on phrases
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### SimpleQueryParser

    public SimpleQueryParser(Analyzer analyzer, String field)
    Creates a new parser searching over a single field.

  - ### SimpleQueryParser

    public SimpleQueryParser(Analyzer analyzer, Map<String,Float> weights)
    Creates a new parser searching over multiple fields with different weights.

  - ### SimpleQueryParser

    public SimpleQueryParser(Analyzer analyzer, Map<String,Float> weights, int flags)
    Creates a new parser with custom flags used to enable/disable certain features.

- ## Method Details

  - ### parse

    public Query parse(String queryText)
    Parses the query text and returns parsed query

  - ### newDefaultQuery

    protected Query newDefaultQuery(String text)
    Factory method to generate a standard query (no phrase or prefix operators).

  - ### newFuzzyQuery

    protected Query newFuzzyQuery(String text, int fuzziness)
    Factory method to generate a fuzzy query.

  - ### newPhraseQuery

    protected Query newPhraseQuery(String text, int slop)
    Factory method to generate a phrase query with slop.

  - ### newPrefixQuery

    protected Query newPrefixQuery(String text)
    Factory method to generate a prefix query.

  - ### simplify

    protected Query simplify(BooleanQuery bq)
    Helper to simplify boolean queries with 0 or 1 clause

  - ### getDefaultOperator

    public BooleanClause.Occur getDefaultOperator()
    Returns the implicit operator setting, which will be either `SHOULD` or `MUST`.

  - ### setDefaultOperator

    public void setDefaultOperator(BooleanClause.Occur operator)
    Sets the implicit operator setting, which must be either `SHOULD` or `MUST`.