org.apache.lucene.queryparser.analyzing

Class AnalyzingQueryParser

  • All Implemented Interfaces:
    QueryParserConstants, CommonQueryParserConfiguration


    public class AnalyzingQueryParser
    extends QueryParser
    Overrides Lucene's default QueryParser so that Fuzzy-, Prefix-, Range-, and WildcardQuerys are also passed through the given analyzer, but wildcard characters * and ? don't get removed from the search terms.

    Warning: This class should only be used with analyzers that do not use stopwords or that add tokens. Also, several stemming analyzers are inappropriate: for example, GermanAnalyzer will turn Häuser into hau, but H?user will become h?user when using this parser and thus no match would be found (i.e. using this parser will be no improvement over QueryParser in such cases).

    • Method Detail

      • getWildcardQuery

        protected Query getWildcardQuery(String field,
                                         String termStr)
                                  throws ParseException
        Called when parser parses an input term that contains one or more wildcard characters (like *), but is not a prefix term (one that has just a single * character at the end).

        Example: will be called for H?user or for H*user.

        Depending on analyzer and settings, a wildcard term may (most probably will) be lower-cased automatically. It will go through the default Analyzer.

        Overrides super class, by passing terms through analyzer.

        Overrides:
        getWildcardQuery in class QueryParserBase
        Parameters:
        field - Name of the field query will use.
        termStr - Term that contains one or more wildcard characters (? or *), but is not simple prefix term
        Returns:
        Resulting Query built for the term
        Throws:
        ParseException - throw in overridden method to disallow
      • getPrefixQuery

        protected Query getPrefixQuery(String field,
                                       String termStr)
                                throws ParseException
        Called when parser parses an input term 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 analyzer and settings, a prefix term may (most probably will) be lower-cased automatically. It will go through the default Analyzer.

        Overrides super class, by passing terms through analyzer.

        Overrides:
        getPrefixQuery in class QueryParserBase
        Parameters:
        field - Name of the field query will use.
        termStr - Term to use for building term for the query (without trailing '*' character!)
        Returns:
        Resulting Query built for the term
        Throws:
        ParseException - throw in overridden method to disallow
      • getFuzzyQuery

        protected Query getFuzzyQuery(String field,
                                      String termStr,
                                      float minSimilarity)
                               throws ParseException
        Called when parser parses an input term that has the fuzzy suffix (~) appended.

        Depending on analyzer and settings, a fuzzy term may (most probably will) be lower-cased automatically. It will go through the default Analyzer.

        Overrides super class, by passing terms through analyzer.

        Overrides:
        getFuzzyQuery in class QueryParserBase
        Parameters:
        field - Name of the field query will use.
        termStr - Term to use for building term for the query
        Returns:
        Resulting Query built for the term
        Throws:
        ParseException - throw in overridden method to disallow