--- /dev/null
+package org.apache.lucene.queryParser.standard;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.text.Collator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.TooManyListenersException;
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.document.DateTools.Resolution;
+import org.apache.lucene.document.DateTools;
+import org.apache.lucene.queryParser.core.QueryNodeException;
+import org.apache.lucene.queryParser.core.QueryParserHelper;
+import org.apache.lucene.queryParser.core.config.QueryConfigHandler;
+import org.apache.lucene.queryParser.standard.builders.StandardQueryTreeBuilder;
+import org.apache.lucene.queryParser.standard.config.AllowLeadingWildcardAttribute;
+import org.apache.lucene.queryParser.standard.config.AnalyzerAttribute;
+import org.apache.lucene.queryParser.standard.config.DateResolutionAttribute;
+import org.apache.lucene.queryParser.standard.config.DefaultOperatorAttribute;
+import org.apache.lucene.queryParser.standard.config.DefaultPhraseSlopAttribute;
+import org.apache.lucene.queryParser.standard.config.FieldBoostMapAttribute;
+import org.apache.lucene.queryParser.standard.config.FieldDateResolutionMapAttribute;
+import org.apache.lucene.queryParser.standard.config.FuzzyAttribute;
+import org.apache.lucene.queryParser.standard.config.FuzzyConfig;
+import org.apache.lucene.queryParser.standard.config.LocaleAttribute;
+import org.apache.lucene.queryParser.standard.config.LowercaseExpandedTermsAttribute;
+import org.apache.lucene.queryParser.standard.config.MultiFieldAttribute;
+import org.apache.lucene.queryParser.standard.config.MultiTermRewriteMethodAttribute;
+import org.apache.lucene.queryParser.standard.config.NumericConfig;
+import org.apache.lucene.queryParser.standard.config.PositionIncrementsAttribute;
+import org.apache.lucene.queryParser.standard.config.RangeCollatorAttribute;
+import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler;
+import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.Operator;
+import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.ConfigurationKeys;
+import org.apache.lucene.queryParser.standard.nodes.RangeQueryNode;
+import org.apache.lucene.queryParser.standard.parser.StandardSyntaxParser;
+import org.apache.lucene.queryParser.standard.processors.StandardQueryNodeProcessorPipeline;
+import org.apache.lucene.search.FuzzyQuery;
+import org.apache.lucene.search.MultiTermQuery;
+import org.apache.lucene.search.Query;
+
+/**
+ * <p>
+ * This class is a helper that enables users to easily use the Lucene query
+ * parser.
+ * </p>
+ * <p>
+ * To construct a Query object from a query string, use the
+ * {@link #parse(String, String)} method:
+ * <ul>
+ * StandardQueryParser queryParserHelper = new StandardQueryParser(); <br/>
+ * Query query = queryParserHelper.parse("a AND b", "defaultField");
+ * </ul>
+ * <p>
+ * To change any configuration before parsing the query string do, for example:
+ * <p/>
+ * <ul>
+ * // the query config handler returned by {@link StandardQueryParser} is a
+ * {@link StandardQueryConfigHandler} <br/>
+ * queryParserHelper.getQueryConfigHandler().setAnalyzer(new
+ * WhitespaceAnalyzer());
+ * </ul>
+ * <p>
+ * The syntax for query strings is as follows (copied from the old QueryParser
+ * javadoc):
+ * <ul>
+ * A Query is a series of clauses. A clause may be prefixed by:
+ * <ul>
+ * <li>a plus (<code>+</code>) or a minus (<code>-</code>) sign, indicating that
+ * the clause is required or prohibited respectively; or
+ * <li>a term followed by a colon, indicating the field to be searched. This
+ * enables one to construct queries which search multiple fields.
+ * </ul>
+ *
+ * A clause may be either:
+ * <ul>
+ * <li>a term, indicating all the documents that contain this term; or
+ * <li>a nested query, enclosed in parentheses. Note that this may be used with
+ * a <code>+</code>/<code>-</code> prefix to require any of a set of terms.
+ * </ul>
+ *
+ * Thus, in BNF, the query grammar is:
+ *
+ * <pre>
+ * Query ::= ( Clause )*
+ * Clause ::= ["+", "-"] [<TERM> ":"] ( <TERM> | "(" Query ")" )
+ * </pre>
+ *
+ * <p>
+ * Examples of appropriately formatted queries can be found in the <a
+ * href="../../../../../../queryparsersyntax.html">query syntax
+ * documentation</a>.
+ * </p>
+ * </ul>
+ * <p>
+ * The text parser used by this helper is a {@link StandardSyntaxParser}.
+ * <p/>
+ * <p>
+ * The query node processor used by this helper is a
+ * {@link StandardQueryNodeProcessorPipeline}.
+ * <p/>
+ * <p>
+ * The builder used by this helper is a {@link StandardQueryTreeBuilder}.
+ * <p/>
+ *
+ * @see StandardQueryParser
+ * @see StandardQueryConfigHandler
+ * @see StandardSyntaxParser
+ * @see StandardQueryNodeProcessorPipeline
+ * @see StandardQueryTreeBuilder
+ */
+public class StandardQueryParser extends QueryParserHelper {
+
+ /**
+ * Constructs a {@link StandardQueryParser} object.
+ */
+ public StandardQueryParser() {
+ super(new StandardQueryConfigHandler(), new StandardSyntaxParser(),
+ new StandardQueryNodeProcessorPipeline(null),
+ new StandardQueryTreeBuilder());
+ }
+
+ /**
+ * Constructs a {@link StandardQueryParser} object and sets an
+ * {@link Analyzer} to it. The same as:
+ *
+ * <ul>
+ * StandardQueryParser qp = new StandardQueryParser();
+ * qp.getQueryConfigHandler().setAnalyzer(analyzer);
+ * </ul>
+ *
+ * @param analyzer the analyzer to be used by this query parser helper
+ */
+ public StandardQueryParser(Analyzer analyzer) {
+ this();
+
+ this.setAnalyzer(analyzer);
+ }
+
+ @Override
+ public String toString() {
+ return "<StandardQueryParser config=\"" + this.getQueryConfigHandler()
+ + "\"/>";
+ }
+
+ /**
+ * Overrides {@link QueryParserHelper#parse(String, String)} so it casts the
+ * return object to {@link Query}. For more reference about this method, check
+ * {@link QueryParserHelper#parse(String, String)}.
+ *
+ * @param query the query string
+ * @param defaultField the default field used by the text parser
+ *
+ * @return the object built from the query
+ *
+ * @throws QueryNodeException if something wrong happens along the three
+ * phases
+ */
+ @Override
+ public Query parse(String query, String defaultField)
+ throws QueryNodeException {
+
+ return (Query) super.parse(query, defaultField);
+
+ }
+
+ /**
+ * Gets implicit operator setting, which will be either {@link Operator#AND}
+ * or {@link Operator#OR}.
+ */
+ public StandardQueryConfigHandler.Operator getDefaultOperator() {
+ return getQueryConfigHandler().get(ConfigurationKeys.DEFAULT_OPERATOR);
+ }
+
+ /**
+ * Sets the collator used to determine index term inclusion in ranges for
+ * RangeQuerys.
+ * <p/>
+ * <strong>WARNING:</strong> Setting the rangeCollator to a non-null collator
+ * using this method will cause every single index Term in the Field
+ * referenced by lowerTerm and/or upperTerm to be examined. Depending on the
+ * number of index Terms in this Field, the operation could be very slow.
+ *
+ * @param collator the collator to use when constructing
+ * {@link RangeQueryNode}s
+ */
+ public void setRangeCollator(Collator collator) {
+ RangeCollatorAttribute attr = getQueryConfigHandler().getAttribute(
+ RangeCollatorAttribute.class);
+ attr.setDateResolution(collator);
+
+ // uncomment code below when deprecated query parser attributes are removed
+ // getQueryConfigHandler().set(ConfigurationKeys.RANGE_COLLATOR, collator);
+ }
+
+ /**
+ * @return the collator used to determine index term inclusion in ranges for
+ * RangeQuerys.
+ */
+ public Collator getRangeCollator() {
+ return getQueryConfigHandler().get(ConfigurationKeys.RANGE_COLLATOR);
+ }
+
+ /**
+ * Sets the boolean operator of the QueryParser. In default mode (
+ * {@link Operator#OR}) terms without any modifiers are considered optional:
+ * for example <code>capital of Hungary</code> is equal to
+ * <code>capital OR of OR Hungary</code>.<br/>
+ * In {@link Operator#AND} mode terms are considered to be in conjunction: the
+ * above mentioned query is parsed as <code>capital AND of AND Hungary</code>
+ *
+ * @deprecated
+ */
+ @Deprecated
+ public void setDefaultOperator(DefaultOperatorAttribute.Operator operator) {
+ DefaultOperatorAttribute attr = getQueryConfigHandler().getAttribute(DefaultOperatorAttribute.class);
+ attr.setOperator(operator);
+ }
+
+ /**
+ * Sets the boolean operator of the QueryParser. In default mode (
+ * {@link Operator#OR}) terms without any modifiers are considered optional:
+ * for example <code>capital of Hungary</code> is equal to
+ * <code>capital OR of OR Hungary</code>.<br/>
+ * In {@link Operator#AND} mode terms are considered to be in conjunction: the
+ * above mentioned query is parsed as <code>capital AND of AND Hungary</code>
+ */
+ public void setDefaultOperator(
+ org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.Operator operator) {
+
+ DefaultOperatorAttribute.Operator attrOperator;
+
+ if (operator == org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.Operator.AND) {
+ attrOperator = DefaultOperatorAttribute.Operator.AND;
+ } else {
+ attrOperator = DefaultOperatorAttribute.Operator.OR;
+ }
+
+ setDefaultOperator(attrOperator);
+
+ // uncomment code below when deprecated query parser attributes are removed
+ // getQueryConfigHandler().set(ConfigurationKeys.DEFAULT_OPERATOR, operator);
+ }
+
+ /**
+ * Set to <code>true</code> to allow leading wildcard characters.
+ * <p>
+ * When set, <code>*</code> or <code>?</code> are allowed as the first
+ * character of a PrefixQuery and WildcardQuery. Note that this can produce
+ * very slow queries on big indexes.
+ * <p>
+ * Default: false.
+ */
+ public void setLowercaseExpandedTerms(boolean lowercaseExpandedTerms) {
+ LowercaseExpandedTermsAttribute attr = getQueryConfigHandler()
+ .getAttribute(LowercaseExpandedTermsAttribute.class);
+ attr.setLowercaseExpandedTerms(lowercaseExpandedTerms);
+ // uncomment code below when deprecated query parser attributes are removed
+ // getQueryConfigHandler().set(ConfigurationKeys.LOWERCASE_EXPANDED_TERMS,
+ // lowercaseExpandedTerms);
+ }
+
+ /**
+ * @see #setLowercaseExpandedTerms(boolean)
+ */
+ public boolean getLowercaseExpandedTerms() {
+ Boolean lowercaseExpandedTerms = getQueryConfigHandler().get(
+ ConfigurationKeys.LOWERCASE_EXPANDED_TERMS);
+
+ if (lowercaseExpandedTerms == null) {
+ return true;
+
+ } else {
+ return lowercaseExpandedTerms;
+ }
+
+ }
+
+ /**
+ * Set to <code>true</code> to allow leading wildcard characters.
+ * <p>
+ * When set, <code>*</code> or <code>?</code> are allowed as the first
+ * character of a PrefixQuery and WildcardQuery. Note that this can produce
+ * very slow queries on big indexes.
+ * <p>
+ * Default: false.
+ */
+ public void setAllowLeadingWildcard(boolean allowLeadingWildcard) {
+ AllowLeadingWildcardAttribute attr = getQueryConfigHandler().getAttribute(
+ AllowLeadingWildcardAttribute.class);
+ attr.setAllowLeadingWildcard(allowLeadingWildcard);
+ // uncomment code below when deprecated query parser attributes are removed
+ // getQueryConfigHandler().set(ConfigurationKeys.ALLOW_LEADING_WILDCARD,
+ // allowLeadingWildcard);
+ }
+
+ /**
+ * Set to <code>true</code> to enable position increments in result query.
+ * <p>
+ * When set, result phrase and multi-phrase queries will be aware of position
+ * increments. Useful when e.g. a StopFilter increases the position increment
+ * of the token that follows an omitted token.
+ * <p>
+ * Default: false.
+ */
+ public void setEnablePositionIncrements(boolean enabled) {
+ PositionIncrementsAttribute attr = getQueryConfigHandler().getAttribute(
+ PositionIncrementsAttribute.class);
+ attr.setPositionIncrementsEnabled(enabled);
+ // uncomment code below when deprecated query parser attributes are removed
+ // getQueryConfigHandler().set(ConfigurationKeys.ENABLE_POSITION_INCREMENTS,
+ // enabled);
+ }
+
+ /**
+ * @see #setEnablePositionIncrements(boolean)
+ */
+ public boolean getEnablePositionIncrements() {
+ Boolean enablePositionsIncrements = getQueryConfigHandler().get(
+ ConfigurationKeys.ENABLE_POSITION_INCREMENTS);
+
+ if (enablePositionsIncrements == null) {
+ return false;
+
+ } else {
+ return enablePositionsIncrements;
+ }
+
+ }
+
+ /**
+ * By default, it uses
+ * {@link MultiTermQuery#CONSTANT_SCORE_AUTO_REWRITE_DEFAULT} when creating a
+ * prefix, wildcard and range queries. This implementation is generally
+ * preferable because it a) Runs faster b) Does not have the scarcity of terms
+ * unduly influence score c) avoids any {@link TooManyListenersException}
+ * exception. However, if your application really needs to use the
+ * old-fashioned boolean queries expansion rewriting and the above points are
+ * not relevant then use this change the rewrite method.
+ */
+ public void setMultiTermRewriteMethod(MultiTermQuery.RewriteMethod method) {
+ MultiTermRewriteMethodAttribute attr = getQueryConfigHandler()
+ .getAttribute(MultiTermRewriteMethodAttribute.class);
+ attr.setMultiTermRewriteMethod(method);
+ // uncomment code below when deprecated query parser attributes are removed
+ // getQueryConfigHandler().set(ConfigurationKeys.MULTI_TERM_REWRITE_METHOD,
+ // method);
+ }
+
+ /**
+ * @see #setMultiTermRewriteMethod(org.apache.lucene.search.MultiTermQuery.RewriteMethod)
+ */
+ public MultiTermQuery.RewriteMethod getMultiTermRewriteMethod() {
+ return getQueryConfigHandler().get(
+ ConfigurationKeys.MULTI_TERM_REWRITE_METHOD);
+ }
+
+ /**
+ * Set the fields a query should be expanded to when the field is
+ * <code>null</code>
+ *
+ * @param fields the fields used to expand the query
+ */
+ public void setMultiFields(CharSequence[] fields) {
+
+ if (fields == null) {
+ fields = new CharSequence[0];
+ }
+
+ MultiFieldAttribute attr = getQueryConfigHandler().addAttribute(
+ MultiFieldAttribute.class);
+ attr.setFields(fields);
+ // uncomment code below when deprecated query parser attributes are removed
+ // getQueryConfigHandler().set(ConfigurationKeys.MULTI_FIELDS, fields);
+
+ }
+
+ /**
+ * Returns the fields used to expand the query when the field for a certain
+ * query is <code>null</code>
+ *
+ * @param fields the fields used to expand the query
+ */
+ public void getMultiFields(CharSequence[] fields) {
+ getQueryConfigHandler().get(ConfigurationKeys.MULTI_FIELDS);
+ }
+
+ /**
+ * Set the prefix length for fuzzy queries. Default is 0.
+ *
+ * @param fuzzyPrefixLength The fuzzyPrefixLength to set.
+ */
+ public void setFuzzyPrefixLength(int fuzzyPrefixLength) {
+ FuzzyAttribute attr = getQueryConfigHandler().addAttribute(
+ FuzzyAttribute.class);
+ attr.setPrefixLength(fuzzyPrefixLength);
+
+ // uncomment code below when deprecated query parser attributes are removed
+ /*
+ * QueryConfigHandler config = getQueryConfigHandler(); FuzzyConfig
+ * fuzzyConfig = config.get(ConfigurationKeys.FUZZY_CONFIG);
+ *
+ * if (fuzzyConfig == null) { fuzzyConfig = new FuzzyConfig();
+ * config.set(ConfigurationKeys.FUZZY_CONFIG, fuzzyConfig); }
+ *
+ * fuzzyConfig.setPrefixLength(fuzzyPrefixLength);
+ */
+ }
+
+ public void setNumericConfigMap(Map<String, NumericConfig> numericConfigMap) {
+ getQueryConfigHandler().set(ConfigurationKeys.NUMERIC_CONFIG_MAP,
+ numericConfigMap);
+ }
+
+ public Map<String, NumericConfig> getNumericConfigMap() {
+ return getQueryConfigHandler().get(ConfigurationKeys.NUMERIC_CONFIG_MAP);
+ }
+
+ /**
+ * Set locale used by date range parsing.
+ */
+ public void setLocale(Locale locale) {
+ LocaleAttribute attr = getQueryConfigHandler().addAttribute(
+ LocaleAttribute.class);
+ attr.setLocale(locale);
+ // uncomment code below when deprecated query parser attributes are removed
+ // getQueryConfigHandler().set(ConfigurationKeys.LOCALE, locale);
+ }
+
+ /**
+ * Returns current locale, allowing access by subclasses.
+ */
+ public Locale getLocale() {
+ return getQueryConfigHandler().get(ConfigurationKeys.LOCALE);
+ }
+
+ /**
+ * Sets the default slop for phrases. If zero, then exact phrase matches are
+ * required. Default value is zero.
+ *
+ * @deprecated renamed to {@link #setPhraseSlop(int)}
+ */
+ @Deprecated
+ public void setDefaultPhraseSlop(int defaultPhraseSlop) {
+ setPhraseSlop(defaultPhraseSlop);
+ }
+
+ /**
+ * Sets the default slop for phrases. If zero, then exact phrase matches are
+ * required. Default value is zero.
+ */
+ public void setPhraseSlop(int defaultPhraseSlop) {
+ DefaultPhraseSlopAttribute attr = getQueryConfigHandler().addAttribute(
+ DefaultPhraseSlopAttribute.class);
+ attr.setDefaultPhraseSlop(defaultPhraseSlop);
+ // uncomment code below when deprecated query parser attributes are removed
+ // getQueryConfigHandler().set(ConfigurationKeys.PHRASE_SLOP,
+ // defaultPhraseSlop);
+ }
+
+ public void setAnalyzer(Analyzer analyzer) {
+ AnalyzerAttribute attr = getQueryConfigHandler().getAttribute(
+ AnalyzerAttribute.class);
+ attr.setAnalyzer(analyzer);
+ // uncomment code below when deprecated query parser attributes are removed
+ // getQueryConfigHandler().set(ConfigurationKeys.ANALYZER, analyzer);
+ }
+
+ public Analyzer getAnalyzer() {
+ return getQueryConfigHandler().get(ConfigurationKeys.ANALYZER);
+ }
+
+ /**
+ * @see #setAllowLeadingWildcard(boolean)
+ */
+ public boolean getAllowLeadingWildcard() {
+ Boolean allowLeadingWildcard = getQueryConfigHandler().get(
+ ConfigurationKeys.ALLOW_LEADING_WILDCARD);
+
+ if (allowLeadingWildcard == null) {
+ return false;
+
+ } else {
+ return allowLeadingWildcard;
+ }
+ }
+
+ /**
+ * Get the minimal similarity for fuzzy queries.
+ */
+ public float getFuzzyMinSim() {
+ FuzzyConfig fuzzyConfig = getQueryConfigHandler().get(
+ ConfigurationKeys.FUZZY_CONFIG);
+
+ if (fuzzyConfig == null) {
+ return FuzzyQuery.defaultMinSimilarity;
+ } else {
+ return fuzzyConfig.getMinSimilarity();
+ }
+ }
+
+ /**
+ * Get the prefix length for fuzzy queries.
+ *
+ * @return Returns the fuzzyPrefixLength.
+ */
+ public int getFuzzyPrefixLength() {
+ FuzzyConfig fuzzyConfig = getQueryConfigHandler().get(
+ ConfigurationKeys.FUZZY_CONFIG);
+
+ if (fuzzyConfig == null) {
+ return FuzzyQuery.defaultPrefixLength;
+ } else {
+ return fuzzyConfig.getPrefixLength();
+ }
+ }
+
+ /**
+ * Gets the default slop for phrases.
+ */
+ public int getPhraseSlop() {
+ Integer phraseSlop = getQueryConfigHandler().get(
+ ConfigurationKeys.PHRASE_SLOP);
+
+ if (phraseSlop == null) {
+ return 0;
+
+ } else {
+ return phraseSlop;
+ }
+ }
+
+ /**
+ * Set the minimum similarity for fuzzy queries. Default is defined on
+ * {@link FuzzyQuery#defaultMinSimilarity}.
+ */
+ public void setFuzzyMinSim(float fuzzyMinSim) {
+ FuzzyAttribute attr = getQueryConfigHandler().addAttribute(
+ FuzzyAttribute.class);
+ attr.setFuzzyMinSimilarity(fuzzyMinSim);
+ // uncomment code below when deprecated query parser attributes are removed
+ /*
+ * QueryConfigHandler config = getQueryConfigHandler(); FuzzyConfig
+ * fuzzyConfig = config.get(ConfigurationKeys.FUZZY_CONFIG);
+ *
+ * if (fuzzyConfig == null) { fuzzyConfig = new FuzzyConfig();
+ * config.set(ConfigurationKeys.FUZZY_CONFIG, fuzzyConfig); }
+ *
+ * fuzzyConfig.setMinSimilarity(fuzzyMinSim);
+ */
+ }
+
+ /**
+ * Sets the boost used for each field.
+ *
+ * @param boosts a collection that maps a field to its boost
+ */
+ public void setFieldsBoost(Map<String, Float> boosts) {
+ FieldBoostMapAttribute attr = getQueryConfigHandler().addAttribute(
+ FieldBoostMapAttribute.class);
+ attr.setFieldBoostMap(boosts);
+ // uncomment code below when deprecated query parser attributes are removed
+ // getQueryConfigHandler().set(ConfigurationKeys.FIELD_BOOST_MAP, boosts);
+ }
+
+ /**
+ * Returns the field to boost map used to set boost for each field.
+ *
+ * @return the field to boost map
+ */
+ public Map<String, Float> getFieldsBoost() {
+ return getQueryConfigHandler().get(ConfigurationKeys.FIELD_BOOST_MAP);
+ }
+
+ /**
+ * Sets the default {@link Resolution} used for certain field when no
+ * {@link Resolution} is defined for this field.
+ *
+ * @param dateResolution the default {@link Resolution}
+ */
+ public void setDateResolution(DateTools.Resolution dateResolution) {
+ DateResolutionAttribute attr = getQueryConfigHandler().addAttribute(
+ DateResolutionAttribute.class);
+ attr.setDateResolution(dateResolution);
+ // uncomment code below when deprecated query parser attributes are removed
+ // getQueryConfigHandler().set(ConfigurationKeys.DATE_RESOLUTION,
+ // dateResolution);
+ }
+
+ /**
+ * Returns the default {@link Resolution} used for certain field when no
+ * {@link Resolution} is defined for this field.
+ *
+ * @return the default {@link Resolution}
+ */
+ public DateTools.Resolution getDateResolution() {
+ return getQueryConfigHandler().get(ConfigurationKeys.DATE_RESOLUTION);
+ }
+
+ /**
+ * Sets the {@link Resolution} used for each field
+ *
+ * @param dateRes a collection that maps a field to its {@link Resolution}
+ *
+ * @deprecated this method was renamed to {@link #setDateResolutionMap(Map)}
+ */
+ @Deprecated
+ public void setDateResolution(Map<CharSequence, DateTools.Resolution> dateRes) {
+ setDateResolutionMap(dateRes);
+ }
+
+ /**
+ * Returns the field to {@link Resolution} map used to normalize each date
+ * field.
+ *
+ * @return the field to {@link Resolution} map
+ */
+ public Map<CharSequence, DateTools.Resolution> getDateResolutionMap() {
+ return getQueryConfigHandler().get(
+ ConfigurationKeys.FIELD_DATE_RESOLUTION_MAP);
+ }
+
+ /**
+ * Sets the {@link Resolution} used for each field
+ *
+ * @param dateRes a collection that maps a field to its {@link Resolution}
+ */
+ public void setDateResolutionMap(
+ Map<CharSequence, DateTools.Resolution> dateRes) {
+ FieldDateResolutionMapAttribute attr = getQueryConfigHandler()
+ .addAttribute(FieldDateResolutionMapAttribute.class);
+ attr.setFieldDateResolutionMap(dateRes);
+ // uncomment code below when deprecated query parser attributes are removed
+ // getQueryConfigHandler().set(ConfigurationKeys.FIELD_DATE_RESOLUTION_MAP,
+ // dateRes);
+ }
+
+}