Index: solr/src/test/org/apache/solr/schema/MockConfigurableSimilarity.java =================================================================== --- solr/src/test/org/apache/solr/schema/MockConfigurableSimilarity.java (revision 1084627) +++ solr/src/test/org/apache/solr/schema/MockConfigurableSimilarity.java (working copy) @@ -16,9 +16,9 @@ */ package org.apache.solr.schema; -import org.apache.lucene.search.DefaultSimilarity; +import org.apache.lucene.search.DefaultSimilarityProvider; -public class MockConfigurableSimilarity extends DefaultSimilarity { +public class MockConfigurableSimilarity extends DefaultSimilarityProvider { private String passthrough; public MockConfigurableSimilarity(String passthrough) { Index: lucene/src/test/org/apache/lucene/search/payloads/TestPayloadNearQuery.java =================================================================== --- lucene/src/test/org/apache/lucene/search/payloads/TestPayloadNearQuery.java (revision 1084627) +++ lucene/src/test/org/apache/lucene/search/payloads/TestPayloadNearQuery.java (working copy) @@ -36,6 +36,8 @@ import org.apache.lucene.search.QueryUtils; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.IndexSearcher; +import org.apache.lucene.search.Similarity; +import org.apache.lucene.search.SimilarityProvider; import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.spans.SpanQuery; import org.apache.lucene.search.spans.SpanNearQuery; @@ -297,7 +299,7 @@ } // must be static for weight serialization tests - static class BoostingSimilarity extends DefaultSimilarity { + static class BoostingSimilarity extends DefaultSimilarity implements SimilarityProvider { @Override public float scorePayload(int docId, int start, int end, byte[] payload, int offset, int length) { //we know it is size 4 here, so ignore the offset/length @@ -310,7 +312,7 @@ return state.getBoost(); } - @Override public float queryNorm(float sumOfSquaredWeights) { + public float queryNorm(float sumOfSquaredWeights) { return 1.0f; } @@ -318,7 +320,7 @@ return 1.0f; } - @Override public float coord(int overlap, int maxOverlap) { + public float coord(int overlap, int maxOverlap) { return 1.0f; } @Override public float tf(float freq) { @@ -337,5 +339,9 @@ } }; } + + public Similarity get(String field) { + return this; + } } } Index: lucene/src/test/org/apache/lucene/search/payloads/TestPayloadTermQuery.java =================================================================== --- lucene/src/test/org/apache/lucene/search/payloads/TestPayloadTermQuery.java (revision 1084627) +++ lucene/src/test/org/apache/lucene/search/payloads/TestPayloadTermQuery.java (working copy) @@ -18,8 +18,11 @@ import org.apache.lucene.util.LuceneTestCase; import org.apache.lucene.util.English; +import org.apache.lucene.search.DefaultSimilarityProvider; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.QueryUtils; +import org.apache.lucene.search.Similarity; +import org.apache.lucene.search.SimilarityProvider; import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.CheckHits; @@ -220,7 +223,12 @@ new MaxPayloadFunction(), false); IndexSearcher theSearcher = new IndexSearcher(directory, true); - theSearcher.setSimilarityProvider(new FullSimilarity()); + theSearcher.setSimilarityProvider(new DefaultSimilarityProvider() { + @Override + public Similarity get(String field) { + return new FullSimilarity(); + } + }); TopDocs hits = searcher.search(query, null, 100); assertTrue("hits is null and it shouldn't be", hits != null); assertTrue("hits Size: " + hits.totalHits + " is not: " + 100, hits.totalHits == 100); @@ -283,7 +291,7 @@ } // must be static for weight serialization tests - static class BoostingSimilarity extends DefaultSimilarity { + static class BoostingSimilarity extends DefaultSimilarity implements SimilarityProvider { // TODO: Remove warning after API has been finalized @Override @@ -300,7 +308,6 @@ return state.getBoost(); } - @Override public float queryNorm(float sumOfSquaredWeights) { return 1; } @@ -310,7 +317,6 @@ return 1; } - @Override public float coord(int overlap, int maxOverlap) { return 1; } @@ -324,6 +330,10 @@ public float tf(float freq) { return freq == 0 ? 0 : 1; } + + public Similarity get(String field) { + return this; + } } static class FullSimilarity extends DefaultSimilarity{ Index: lucene/src/test/org/apache/lucene/search/spans/TestSpans.java =================================================================== --- lucene/src/test/org/apache/lucene/search/spans/TestSpans.java (revision 1084627) +++ lucene/src/test/org/apache/lucene/search/spans/TestSpans.java (working copy) @@ -17,11 +17,13 @@ * limitations under the License. */ +import org.apache.lucene.search.DefaultSimilarityProvider; import org.apache.lucene.search.DocIdSetIterator; import org.apache.lucene.search.Query; import org.apache.lucene.search.CheckHits; import org.apache.lucene.search.DefaultSimilarity; import org.apache.lucene.search.Scorer; +import org.apache.lucene.search.Similarity; import org.apache.lucene.search.SimilarityProvider; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.IndexSearcher; @@ -410,10 +412,14 @@ for (int i = 0; i < leaves.length; i++) { - final SimilarityProvider sim = new DefaultSimilarity() { - @Override - public float sloppyFreq(int distance) { - return 0.0f; + final SimilarityProvider sim = new DefaultSimilarityProvider() { + public Similarity get(String field) { + return new DefaultSimilarity() { + @Override + public float sloppyFreq(int distance) { + return 0.0f; + } + }; } }; Index: lucene/src/test/org/apache/lucene/search/spans/TestPayloadSpans.java =================================================================== --- lucene/src/test/org/apache/lucene/search/spans/TestPayloadSpans.java (revision 1084627) +++ lucene/src/test/org/apache/lucene/search/spans/TestPayloadSpans.java (working copy) @@ -37,7 +37,7 @@ import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Payload; import org.apache.lucene.index.Term; -import org.apache.lucene.search.DefaultSimilarity; +import org.apache.lucene.search.DefaultSimilarityProvider; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.SimilarityProvider; import org.apache.lucene.search.TermQuery; @@ -50,7 +50,7 @@ public class TestPayloadSpans extends LuceneTestCase { private IndexSearcher searcher; - private SimilarityProvider similarity = new DefaultSimilarity(); + private SimilarityProvider similarity = new DefaultSimilarityProvider(); protected IndexReader indexReader; private IndexReader closeIndexReader; private Directory directory; Index: lucene/src/test/org/apache/lucene/search/TestBoolean2.java =================================================================== --- lucene/src/test/org/apache/lucene/search/TestBoolean2.java (revision 1084627) +++ lucene/src/test/org/apache/lucene/search/TestBoolean2.java (working copy) @@ -210,7 +210,7 @@ int[] expDocNrs = {2, 3}; SimilarityProvider oldSimilarity = searcher.getSimilarityProvider(); try { - searcher.setSimilarityProvider(new DefaultSimilarity(){ + searcher.setSimilarityProvider(new DefaultSimilarityProvider(){ @Override public float coord(int overlap, int maxOverlap) { return overlap / ((float)maxOverlap - 1); Index: lucene/src/test/org/apache/lucene/search/TestConstantScoreQuery.java =================================================================== --- lucene/src/test/org/apache/lucene/search/TestConstantScoreQuery.java (revision 1084627) +++ lucene/src/test/org/apache/lucene/search/TestConstantScoreQuery.java (working copy) @@ -97,7 +97,7 @@ searcher = newSearcher(reader); // set a similarity that does not normalize our boost away - searcher.setSimilarityProvider(new DefaultSimilarity() { + searcher.setSimilarityProvider(new DefaultSimilarityProvider() { @Override public float queryNorm(float sumOfSquaredWeights) { return 1.0f; Index: lucene/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java =================================================================== --- lucene/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java (revision 1084627) +++ lucene/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java (working copy) @@ -73,7 +73,12 @@ } } - public SimilarityProvider sim = new TestSimilarity(); + public SimilarityProvider sim = new DefaultSimilarityProvider() { + @Override + public Similarity get(String field) { + return new TestSimilarity(); + } + }; public Directory index; public IndexReader r; public IndexSearcher s; Index: lucene/src/test/org/apache/lucene/search/TestComplexExplanations.java =================================================================== --- lucene/src/test/org/apache/lucene/search/TestComplexExplanations.java (revision 1084627) +++ lucene/src/test/org/apache/lucene/search/TestComplexExplanations.java (working copy) @@ -44,8 +44,8 @@ } // must be static for weight serialization tests - private static DefaultSimilarity createQnorm1Similarity() { - return new DefaultSimilarity() { + private static DefaultSimilarityProvider createQnorm1Similarity() { + return new DefaultSimilarityProvider() { @Override public float queryNorm(float sumOfSquaredWeights) { return 1.0f; // / (float) Math.sqrt(1.0f + sumOfSquaredWeights); Index: lucene/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java =================================================================== --- lucene/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java (revision 1084627) +++ lucene/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java (working copy) @@ -296,25 +296,30 @@ IndexReader reader = writer.getReader(); IndexSearcher searcher = newSearcher(reader); - searcher.setSimilarityProvider(new DefaultSimilarity() { - + searcher.setSimilarityProvider(new DefaultSimilarityProvider() { @Override - public IDFExplanation idfExplain(Collection terms, - IndexSearcher searcher) throws IOException { - return new IDFExplanation() { - + public Similarity get(String field) { + return new DefaultSimilarity() { + @Override - public float getIdf() { - return 10f; - } + public IDFExplanation idfExplain(Collection terms, + IndexSearcher searcher) throws IOException { + return new IDFExplanation() { - @Override - public String explain() { - return "just a test"; - } - + @Override + public float getIdf() { + return 10f; + } + + @Override + public String explain() { + return "just a test"; + } + + }; + } }; - } + } }); MultiPhraseQuery query = new MultiPhraseQuery(); Index: lucene/src/test/org/apache/lucene/index/TestIndexWriterConfig.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestIndexWriterConfig.java (revision 1084627) +++ lucene/src/test/org/apache/lucene/index/TestIndexWriterConfig.java (working copy) @@ -26,14 +26,14 @@ import org.apache.lucene.analysis.MockAnalyzer; import org.apache.lucene.index.DocumentsWriter.IndexingChain; import org.apache.lucene.index.IndexWriterConfig.OpenMode; -import org.apache.lucene.search.DefaultSimilarity; +import org.apache.lucene.search.DefaultSimilarityProvider; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.util.LuceneTestCase; import org.junit.Test; public class TestIndexWriterConfig extends LuceneTestCase { - private static final class MySimilarity extends DefaultSimilarity { + private static final class MySimilarity extends DefaultSimilarityProvider { // Does not implement anything - used only for type checking on IndexWriterConfig. } Index: lucene/src/test/org/apache/lucene/index/TestIndexReaderCloneNorms.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestIndexReaderCloneNorms.java (revision 1084627) +++ lucene/src/test/org/apache/lucene/index/TestIndexReaderCloneNorms.java (working copy) @@ -31,6 +31,7 @@ import org.apache.lucene.index.IndexWriterConfig.OpenMode; import org.apache.lucene.index.SegmentReader.Norm; import org.apache.lucene.search.DefaultSimilarity; +import org.apache.lucene.search.DefaultSimilarityProvider; import org.apache.lucene.search.Similarity; import org.apache.lucene.search.SimilarityProvider; import org.apache.lucene.store.Directory; @@ -41,12 +42,17 @@ */ public class TestIndexReaderCloneNorms extends LuceneTestCase { - private class SimilarityOne extends DefaultSimilarity { + private class SimilarityOne extends DefaultSimilarityProvider { @Override - public float computeNorm(FieldInvertState state) { - // diable length norm - return state.getBoost(); - } + public Similarity get(String field) { + return new DefaultSimilarity() { + @Override + public float computeNorm(FieldInvertState state) { + // diable length norm + return state.getBoost(); + } + }; + } } private static final int NUM_FIELDS = 10; Index: lucene/src/test/org/apache/lucene/index/TestMaxTermFrequency.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestMaxTermFrequency.java (revision 1084627) +++ lucene/src/test/org/apache/lucene/index/TestMaxTermFrequency.java (working copy) @@ -27,6 +27,8 @@ import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.search.DefaultSimilarity; +import org.apache.lucene.search.DefaultSimilarityProvider; +import org.apache.lucene.search.Similarity; import org.apache.lucene.store.Directory; import org.apache.lucene.util.LuceneTestCase; import org.apache.lucene.util._TestUtil; @@ -46,7 +48,12 @@ dir = newDirectory(); IndexWriterConfig config = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(MockTokenizer.SIMPLE, true)).setMergePolicy(newInOrderLogMergePolicy()); - config.setSimilarityProvider(new TestSimilarity()); + config.setSimilarityProvider(new DefaultSimilarityProvider() { + @Override + public Similarity get(String field) { + return new TestSimilarity(); + } + }); RandomIndexWriter writer = new RandomIndexWriter(random, dir, config); Document doc = new Document(); Field foo = newField("foo", "", Field.Store.NO, Field.Index.ANALYZED); Index: lucene/src/test/org/apache/lucene/index/TestNorms.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestNorms.java (revision 1084627) +++ lucene/src/test/org/apache/lucene/index/TestNorms.java (working copy) @@ -29,6 +29,7 @@ import org.apache.lucene.document.Field.Store; import org.apache.lucene.index.IndexWriterConfig.OpenMode; import org.apache.lucene.search.DefaultSimilarity; +import org.apache.lucene.search.DefaultSimilarityProvider; import org.apache.lucene.search.Similarity; import org.apache.lucene.search.SimilarityProvider; import org.apache.lucene.store.Directory; @@ -40,12 +41,17 @@ */ public class TestNorms extends LuceneTestCase { - private class SimilarityOne extends DefaultSimilarity { + private class SimilarityOne extends DefaultSimilarityProvider { @Override - public float computeNorm(FieldInvertState state) { - // Disable length norm - return state.getBoost(); - } + public Similarity get(String field) { + return new DefaultSimilarity() { + @Override + public float computeNorm(FieldInvertState state) { + // diable length norm + return state.getBoost(); + } + }; + } } private static final int NUM_FIELDS = 10; @@ -261,7 +267,12 @@ public void testCustomEncoder() throws Exception { Directory dir = newDirectory(); IndexWriterConfig config = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer()); - config.setSimilarityProvider(new CustomNormEncodingSimilarity()); + config.setSimilarityProvider(new DefaultSimilarityProvider() { + @Override + public Similarity get(String field) { + return new CustomNormEncodingSimilarity(); + } + }); RandomIndexWriter writer = new RandomIndexWriter(random, dir, config); Document doc = new Document(); Field foo = newField("foo", "", Field.Store.NO, Field.Index.ANALYZED); Index: lucene/src/java/org/apache/lucene/search/DefaultSimilarityProvider.java =================================================================== --- lucene/src/java/org/apache/lucene/search/DefaultSimilarityProvider.java (revision 0) +++ lucene/src/java/org/apache/lucene/search/DefaultSimilarityProvider.java (revision 0) @@ -0,0 +1,41 @@ +package org.apache.lucene.search; + +/** + * 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. + */ + +/** + * Expert: Default scoring provider. + *

+ * Returns {@link DefaultSimilarity} for every field + */ +public class DefaultSimilarityProvider implements SimilarityProvider { + private static final Similarity impl = new DefaultSimilarity(); + + /** Implemented as overlap / maxOverlap. */ + public float coord(int overlap, int maxOverlap) { + return overlap / (float)maxOverlap; + } + + /** Implemented as 1/sqrt(sumOfSquaredWeights). */ + public float queryNorm(float sumOfSquaredWeights) { + return (float)(1.0 / Math.sqrt(sumOfSquaredWeights)); + } + + public Similarity get(String field) { + return impl; + } +} Property changes on: lucene\src\java\org\apache\lucene\search\DefaultSimilarityProvider.java ___________________________________________________________________ Added: svn:eol-style + native Index: lucene/src/java/org/apache/lucene/search/Similarity.java =================================================================== --- lucene/src/java/org/apache/lucene/search/Similarity.java (revision 1084627) +++ lucene/src/java/org/apache/lucene/search/Similarity.java (working copy) @@ -362,7 +362,7 @@ * than another document with fewer query terms. * This is a search time factor computed in * {@link SimilarityProvider#coord(int, int) coord(q,d)} - * by the Similarity in effect at search time. + * by the SimilarityProvider in effect at search time. *
 
* * @@ -373,17 +373,17 @@ * is a normalizing factor used to make scores between queries comparable. * This factor does not affect document ranking (since all ranked documents are multiplied by the same factor), * but rather just attempts to make scores from different queries (or even different indexes) comparable. - * This is a search time factor computed by the Similarity in effect at search time. + * This is a search time factor computed by the SimilarityProvider in effect at search time. * * The default computation in - * {@link org.apache.lucene.search.DefaultSimilarity#queryNorm(float) DefaultSimilarity} + * {@link org.apache.lucene.search.DefaultSimilarityProvider#queryNorm(float) DefaultSimilarityProvider} * produces a Euclidean norm: *
 
* * * *
* queryNorm(q)   =   - * {@link org.apache.lucene.search.DefaultSimilarity#queryNorm(float) queryNorm(sumOfSquaredWeights)} + * {@link org.apache.lucene.search.DefaultSimilarityProvider#queryNorm(float) queryNorm(sumOfSquaredWeights)} *   =   * Index: lucene/src/java/org/apache/lucene/search/IndexSearcher.java =================================================================== --- lucene/src/java/org/apache/lucene/search/IndexSearcher.java (revision 1084627) +++ lucene/src/java/org/apache/lucene/search/IndexSearcher.java (working copy) @@ -72,7 +72,7 @@ private final ExecutorService executor; // the default SimilarityProvider - private static final SimilarityProvider defaultProvider = new DefaultSimilarity(); + private static final SimilarityProvider defaultProvider = new DefaultSimilarityProvider(); /** * Expert: returns a default SimilarityProvider instance. Index: lucene/src/java/org/apache/lucene/search/DefaultSimilarity.java =================================================================== --- lucene/src/java/org/apache/lucene/search/DefaultSimilarity.java (revision 1084627) +++ lucene/src/java/org/apache/lucene/search/DefaultSimilarity.java (working copy) @@ -20,7 +20,7 @@ */ /** Expert: Default scoring implementation. */ -public class DefaultSimilarity extends Similarity implements SimilarityProvider { +public class DefaultSimilarity extends Similarity { /** Implemented as * state.getBoost()*lengthNorm(numTerms), where @@ -40,11 +40,6 @@ return state.getBoost() * ((float) (1.0 / Math.sqrt(numTerms))); } - /** Implemented as 1/sqrt(sumOfSquaredWeights). */ - public float queryNorm(float sumOfSquaredWeights) { - return (float)(1.0 / Math.sqrt(sumOfSquaredWeights)); - } - /** Implemented as sqrt(freq). */ @Override public float tf(float freq) { @@ -63,11 +58,6 @@ return (float)(Math.log(numDocs/(double)(docFreq+1)) + 1.0); } - /** Implemented as overlap / maxOverlap. */ - public float coord(int overlap, int maxOverlap) { - return overlap / (float)maxOverlap; - } - // Default true protected boolean discountOverlaps = true; @@ -88,12 +78,4 @@ public boolean getDiscountOverlaps() { return discountOverlaps; } - - /** - * Returns this default implementation for all fields. - * Override this method to customize scoring on a per-field basis. - */ - public Similarity get(String field) { - return this; - } } Index: lucene/contrib/misc/src/test/org/apache/lucene/index/TestFieldNormModifier.java =================================================================== --- lucene/contrib/misc/src/test/org/apache/lucene/index/TestFieldNormModifier.java (revision 1084627) +++ lucene/contrib/misc/src/test/org/apache/lucene/index/TestFieldNormModifier.java (working copy) @@ -26,8 +26,10 @@ import org.apache.lucene.index.IndexReader.AtomicReaderContext; import org.apache.lucene.search.Collector; import org.apache.lucene.search.DefaultSimilarity; +import org.apache.lucene.search.DefaultSimilarityProvider; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Scorer; +import org.apache.lucene.search.Similarity; import org.apache.lucene.search.SimilarityProvider; import org.apache.lucene.search.TermQuery; import org.apache.lucene.store.Directory; @@ -42,10 +44,15 @@ public Directory store; /** inverts the normal notion of lengthNorm */ - public static SimilarityProvider s = new DefaultSimilarity() { + public static SimilarityProvider s = new DefaultSimilarityProvider() { @Override - public float computeNorm(FieldInvertState state) { - return state.getBoost() * (discountOverlaps ? state.getLength() - state.getNumOverlap() : state.getLength()); + public Similarity get(String field) { + return new DefaultSimilarity() { + @Override + public float computeNorm(FieldInvertState state) { + return state.getBoost() * (discountOverlaps ? state.getLength() - state.getNumOverlap() : state.getLength()); + } + }; } }; Index: lucene/contrib/misc/src/test/org/apache/lucene/misc/SweetSpotSimilarityTest.java =================================================================== --- lucene/contrib/misc/src/test/org/apache/lucene/misc/SweetSpotSimilarityTest.java (revision 1084627) +++ lucene/contrib/misc/src/test/org/apache/lucene/misc/SweetSpotSimilarityTest.java (working copy) @@ -19,6 +19,7 @@ package org.apache.lucene.misc; import org.apache.lucene.search.DefaultSimilarity; +import org.apache.lucene.search.DefaultSimilarityProvider; import org.apache.lucene.search.Similarity; import org.apache.lucene.search.SimilarityProvider; import org.apache.lucene.util.LuceneTestCase; @@ -84,7 +85,7 @@ final SweetSpotSimilarity ssB = new SweetSpotSimilarity(); ssB.setLengthNormFactors(5,8,0.1f, false); - SimilarityProvider sp = new SweetSpotSimilarity() { + SimilarityProvider sp = new DefaultSimilarityProvider() { public Similarity get(String field) { if (field.equals("bar")) return ssBar; Index: lucene/contrib/misc/src/test/org/apache/lucene/misc/TestLengthNormModifier.java =================================================================== --- lucene/contrib/misc/src/test/org/apache/lucene/misc/TestLengthNormModifier.java (revision 1084627) +++ lucene/contrib/misc/src/test/org/apache/lucene/misc/TestLengthNormModifier.java (working copy) @@ -31,8 +31,10 @@ import org.apache.lucene.index.Term; import org.apache.lucene.search.Collector; import org.apache.lucene.search.DefaultSimilarity; +import org.apache.lucene.search.DefaultSimilarityProvider; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Scorer; +import org.apache.lucene.search.Similarity; import org.apache.lucene.search.SimilarityProvider; import org.apache.lucene.search.TermQuery; import org.apache.lucene.store.Directory; @@ -47,12 +49,17 @@ public Directory store; /** inverts the normal notion of lengthNorm */ - public static SimilarityProvider s = new DefaultSimilarity() { - @Override - public float computeNorm(FieldInvertState state) { - return state.getBoost() * (discountOverlaps ? state.getLength() - state.getNumOverlap() : state.getLength()); - } - }; + public static SimilarityProvider s = new DefaultSimilarityProvider() { + @Override + public Similarity get(String field) { + return new DefaultSimilarity() { + @Override + public float computeNorm(FieldInvertState state) { + return state.getBoost() * (discountOverlaps ? state.getLength() - state.getNumOverlap() : state.getLength()); + } + }; + } + }; @Override public void setUp() throws Exception { @@ -163,12 +170,18 @@ } // override the norms to be inverted - SimilarityProvider s = new DefaultSimilarity() { - @Override - public float computeNorm(FieldInvertState state) { - return state.getBoost() * (discountOverlaps ? state.getLength() - state.getNumOverlap() : state.getLength()); - } - }; + SimilarityProvider s = new DefaultSimilarityProvider() { + @Override + public Similarity get(String field) { + return new DefaultSimilarity() { + @Override + public float computeNorm(FieldInvertState state) { + return state.getBoost() * (discountOverlaps ? state.getLength() - state.getNumOverlap() : state.getLength()); + } + }; + } + }; + FieldNormModifier fnm = new FieldNormModifier(store, s); fnm.reSetNorms("field");