package org.apache.lucene.queryParser; /** * 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.CollationKey; import java.text.Collator; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Locale; import junit.framework.Assert; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.KeywordAnalyzer; import org.apache.lucene.document.DateTools; import org.apache.lucene.queryParser.standard.config.AllowLeadingWildcardAttribute; import org.apache.lucene.queryParser.standard.config.AnalyzerAttribute; import org.apache.lucene.queryParser.standard.config.BoostAttribute; 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.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.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.ConfigurationKeys; import org.apache.lucene.queryParser.standard.config.StandardQueryConfigHandler.Operator; import org.apache.lucene.search.FuzzyQuery; import org.apache.lucene.search.MultiTermQuery; import org.apache.lucene.util.LuceneTestCase; import org.junit.Test; public class TestAttributes extends LuceneTestCase { @Test public void testAttributes() { StandardQueryConfigHandler config = new StandardQueryConfigHandler(); AnalyzerAttribute analyzerAttr = config .addAttribute(AnalyzerAttribute.class); Assert.assertTrue(null == analyzerAttr.getAnalyzer()); Assert.assertTrue(null == config.get(ConfigurationKeys.ANALYZER)); Analyzer analyzer = new KeywordAnalyzer(); analyzerAttr.setAnalyzer(analyzer); Assert.assertTrue(analyzer == analyzerAttr.getAnalyzer()); Assert.assertTrue(analyzer == config.get(ConfigurationKeys.ANALYZER)); DateResolutionAttribute dateResAttr = config .addAttribute(DateResolutionAttribute.class); Assert.assertTrue(null == dateResAttr.getDateResolution()); Assert.assertTrue(null == config.get(ConfigurationKeys.DATE_RESOLUTION)); DateTools.Resolution dateRes = DateTools.Resolution.HOUR; dateResAttr.setDateResolution(dateRes); Assert.assertTrue(dateRes == dateResAttr.getDateResolution()); Assert.assertTrue(dateRes == config.get(ConfigurationKeys.DATE_RESOLUTION)); DefaultPhraseSlopAttribute defaultPhraseSlopAttr = config .addAttribute(DefaultPhraseSlopAttribute.class); Assert.assertEquals(0, defaultPhraseSlopAttr.getDefaultPhraseSlop()); Assert .assertEquals(0, config.get(ConfigurationKeys.PHRASE_SLOP).intValue()); int phraseSlop = 1; defaultPhraseSlopAttr.setDefaultPhraseSlop(phraseSlop); Assert.assertEquals(phraseSlop, defaultPhraseSlopAttr .getDefaultPhraseSlop()); Assert.assertEquals(phraseSlop, config.get(ConfigurationKeys.PHRASE_SLOP) .intValue()); FieldBoostMapAttribute fieldBoostMapAttr = config .addAttribute(FieldBoostMapAttribute.class); Assert.assertEquals(new LinkedHashMap<String, Float>(), fieldBoostMapAttr .getFieldBoostMap()); Assert.assertEquals(new LinkedHashMap<String, Float>(), config .get(ConfigurationKeys.FIELD_BOOST_MAP)); LinkedHashMap<String, Float> fieldBoostMap = new LinkedHashMap<String, Float>(); fieldBoostMap.put("test", 0.3f); fieldBoostMapAttr.setFieldBoostMap(fieldBoostMap); Assert.assertEquals(fieldBoostMap, fieldBoostMapAttr.getFieldBoostMap()); Assert.assertEquals(fieldBoostMap, config .get(ConfigurationKeys.FIELD_BOOST_MAP)); FieldDateResolutionMapAttribute fieldDateResolutionMapAttr = config .addAttribute(FieldDateResolutionMapAttribute.class); Assert.assertEquals(new HashMap<CharSequence, DateTools.Resolution>(), fieldDateResolutionMapAttr.getFieldDateResolutionMap()); Assert.assertEquals(new HashMap<CharSequence, DateTools.Resolution>(), config.get(ConfigurationKeys.FIELD_DATE_RESOLUTION_MAP)); HashMap<CharSequence, DateTools.Resolution> fieldDateResMap = new HashMap<CharSequence, DateTools.Resolution>(); fieldDateResMap.put("test", DateTools.Resolution.HOUR); fieldDateResolutionMapAttr.setFieldDateResolutionMap(fieldDateResMap); Assert.assertEquals(fieldDateResMap, fieldDateResolutionMapAttr.getFieldDateResolutionMap()); Assert.assertEquals(fieldDateResMap, config .get(ConfigurationKeys.FIELD_DATE_RESOLUTION_MAP)); LocaleAttribute localeAttr = config.addAttribute(LocaleAttribute.class); Assert.assertEquals(Locale.getDefault(), localeAttr.getLocale()); Assert.assertEquals(Locale.getDefault(), config .get(ConfigurationKeys.LOCALE)); Locale locale = Locale.CHINA; localeAttr.setLocale(locale); Assert.assertEquals(locale, localeAttr.getLocale()); Assert.assertEquals(locale, config.get(ConfigurationKeys.LOCALE)); LowercaseExpandedTermsAttribute lowercaseExpandedTermsAttr = config .addAttribute(LowercaseExpandedTermsAttribute.class); Assert.assertEquals(true, lowercaseExpandedTermsAttr .isLowercaseExpandedTerms()); Assert.assertEquals(true, config.get( ConfigurationKeys.LOWERCASE_EXPANDED_TERMS).booleanValue()); boolean lowercaseEnabled = false; lowercaseExpandedTermsAttr.setLowercaseExpandedTerms(lowercaseEnabled); Assert.assertEquals(lowercaseEnabled, lowercaseExpandedTermsAttr .isLowercaseExpandedTerms()); Assert.assertEquals(lowercaseEnabled, config.get( ConfigurationKeys.LOWERCASE_EXPANDED_TERMS).booleanValue()); MultiTermRewriteMethodAttribute multiTermRewriteMethodAttr = config .addAttribute(MultiTermRewriteMethodAttribute.class); Assert .assertTrue(MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT == multiTermRewriteMethodAttr .getMultiTermRewriteMethod()); Assert .assertTrue(MultiTermQuery.CONSTANT_SCORE_AUTO_REWRITE_DEFAULT == config .get(ConfigurationKeys.MULTI_TERM_REWRITE_METHOD)); MultiTermQuery.RewriteMethod rewriteMethod = MultiTermQuery.CONSTANT_SCORE_FILTER_REWRITE; multiTermRewriteMethodAttr.setMultiTermRewriteMethod(rewriteMethod); Assert.assertTrue(rewriteMethod == multiTermRewriteMethodAttr .getMultiTermRewriteMethod()); Assert.assertTrue(rewriteMethod == config .get(ConfigurationKeys.MULTI_TERM_REWRITE_METHOD)); PositionIncrementsAttribute positionIncrementsAttr = config .addAttribute(PositionIncrementsAttribute.class); Assert.assertEquals(false, positionIncrementsAttr .isPositionIncrementsEnabled()); Assert.assertEquals(false, config.get( ConfigurationKeys.ENABLE_POSITION_INCREMENTS).booleanValue()); boolean posIncrEnabled = true; positionIncrementsAttr.setPositionIncrementsEnabled(posIncrEnabled); Assert.assertEquals(posIncrEnabled, positionIncrementsAttr .isPositionIncrementsEnabled()); Assert.assertEquals(posIncrEnabled, config.get( ConfigurationKeys.ENABLE_POSITION_INCREMENTS).booleanValue()); RangeCollatorAttribute rangeCollatorAttr = config .addAttribute(RangeCollatorAttribute.class); Assert.assertTrue(null == rangeCollatorAttr.getRangeCollator()); Assert.assertTrue(null == config.get(ConfigurationKeys.RANGE_COLLATOR)); Collator collator = new Collator() { @Override public int compare(String arg0, String arg1) { return 0; } @Override public CollationKey getCollationKey(String arg0) { return null; } @Override public int hashCode() { return 0; } }; rangeCollatorAttr.setDateResolution(collator); Assert.assertTrue(collator == rangeCollatorAttr.getRangeCollator()); Assert.assertTrue(collator == config.get(ConfigurationKeys.RANGE_COLLATOR)); BoostAttribute boostAttr = config.addAttribute(BoostAttribute.class); Assert.assertEquals(1.0f, boostAttr.getBoost()); Assert.assertEquals(1.0f, config.get(ConfigurationKeys.BOOST).floatValue()); float boost = 2.0f; boostAttr.setBoost(boost); Assert.assertEquals(boost, boostAttr.getBoost()); Assert .assertEquals(boost, config.get(ConfigurationKeys.BOOST).floatValue()); FuzzyAttribute fuzzyAttributeAttr = config .addAttribute(FuzzyAttribute.class); Assert.assertEquals(FuzzyQuery.defaultMinSimilarity, fuzzyAttributeAttr .getFuzzyMinSimilarity()); Assert.assertEquals(FuzzyQuery.defaultPrefixLength, fuzzyAttributeAttr .getPrefixLength()); Assert.assertEquals(FuzzyQuery.defaultMinSimilarity, config.get( ConfigurationKeys.FUZZY_CONFIG).getMinSimilarity()); Assert.assertEquals(FuzzyQuery.defaultPrefixLength, config.get( ConfigurationKeys.FUZZY_CONFIG).getPrefixLength()); int prefixLength = 232; float minSim = 23.923f; fuzzyAttributeAttr.setFuzzyMinSimilarity(minSim); fuzzyAttributeAttr.setPrefixLength(prefixLength); Assert.assertEquals(minSim, fuzzyAttributeAttr.getFuzzyMinSimilarity()); Assert.assertEquals(prefixLength, fuzzyAttributeAttr.getPrefixLength()); Assert.assertEquals(minSim, config.get(ConfigurationKeys.FUZZY_CONFIG) .getMinSimilarity()); Assert.assertEquals(prefixLength, config .get(ConfigurationKeys.FUZZY_CONFIG).getPrefixLength()); DefaultOperatorAttribute defaultOpAttr = config .addAttribute(DefaultOperatorAttribute.class); Assert.assertEquals(DefaultOperatorAttribute.Operator.OR, defaultOpAttr .getOperator()); Assert.assertEquals(Operator.OR, config .get(ConfigurationKeys.DEFAULT_OPERATOR)); DefaultOperatorAttribute.Operator oldOperator = DefaultOperatorAttribute.Operator.AND; Operator newOperator = Operator.AND; defaultOpAttr.setOperator(oldOperator); Assert.assertEquals(oldOperator, defaultOpAttr.getOperator()); Assert.assertEquals(newOperator, config .get(ConfigurationKeys.DEFAULT_OPERATOR)); } }