You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by da...@apache.org on 2018/01/11 08:01:16 UTC

[40/50] [abbrv] lucene-solr:jira/solr-11702: LUCENE-8119: Remove SimScorer.maxScore(float maxFreq).

LUCENE-8119: Remove SimScorer.maxScore(float maxFreq).


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/838c604b
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/838c604b
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/838c604b

Branch: refs/heads/jira/solr-11702
Commit: 838c604b76534a8774c846dcf6b1e94532f0d62c
Parents: 6336ed4
Author: Adrien Grand <jp...@gmail.com>
Authored: Tue Jan 9 09:52:54 2018 +0100
Committer: Adrien Grand <jp...@gmail.com>
Committed: Tue Jan 9 14:42:16 2018 +0100

----------------------------------------------------------------------
 .../org/apache/lucene/search/LeafSimScorer.java |  3 +-
 .../apache/lucene/search/MultiPhraseQuery.java  |  4 +-
 .../org/apache/lucene/search/PhraseQuery.java   |  4 +-
 .../org/apache/lucene/search/SynonymQuery.java  |  2 +-
 .../lucene/search/similarities/Axiomatic.java   |  6 ---
 .../search/similarities/BM25Similarity.java     |  6 ---
 .../search/similarities/BooleanSimilarity.java  |  5 ---
 .../search/similarities/DFISimilarity.java      |  6 ---
 .../search/similarities/DFRSimilarity.java      |  6 ---
 .../search/similarities/IBSimilarity.java       |  6 ---
 .../similarities/LMDirichletSimilarity.java     |  6 ---
 .../similarities/LMJelinekMercerSimilarity.java |  6 ---
 .../search/similarities/MultiSimilarity.java    |  9 -----
 .../lucene/search/similarities/Similarity.java  | 42 +++++++++++++++-----
 .../search/similarities/SimilarityBase.java     | 12 ------
 .../search/similarities/TFIDFSimilarity.java    | 10 -----
 .../apache/lucene/search/spans/SpanWeight.java  |  4 +-
 .../lucene/index/TestMaxTermFrequency.java      |  4 --
 .../search/TestBooleanQueryVisitSubscorers.java |  4 --
 .../apache/lucene/search/TestConjunctions.java  |  5 ---
 .../lucene/search/TestSimilarityProvider.java   | 11 -----
 .../lucene/search/TestSubScorerFreqs.java       |  5 ---
 .../lucene/search/join/TestBlockJoin.java       |  5 ---
 .../function/valuesource/NormValueSource.java   |  2 +-
 .../lucene/search/TermAutomatonQuery.java       |  2 +-
 .../similarities/AssertingSimilarity.java       | 13 ++----
 .../similarities/BaseSimilarityTestCase.java    |  6 ++-
 27 files changed, 49 insertions(+), 145 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/java/org/apache/lucene/search/LeafSimScorer.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/LeafSimScorer.java b/lucene/core/src/java/org/apache/lucene/search/LeafSimScorer.java
index 46f9dc2..5de8295 100644
--- a/lucene/core/src/java/org/apache/lucene/search/LeafSimScorer.java
+++ b/lucene/core/src/java/org/apache/lucene/search/LeafSimScorer.java
@@ -37,7 +37,7 @@ public final class LeafSimScorer {
   public LeafSimScorer(SimScorer scorer, LeafReader reader, boolean needsScores, float maxFreq) throws IOException {
     this.scorer = scorer;
     norms = needsScores ? reader.getNormValues(scorer.getField()) : null;
-    maxScore = needsScores ? scorer.maxScore(maxFreq) : Integer.MAX_VALUE;
+    maxScore = needsScores ? scorer.score(maxFreq, 1) : Float.MAX_VALUE;
   }
 
   private long getNormValue(int doc) throws IOException {
@@ -66,7 +66,6 @@ public final class LeafSimScorer {
 
   /**
    * Return an upper bound of the score.
-   * @see SimScorer#maxScore(float)
    */
   public float maxScore() {
     return maxScore;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/java/org/apache/lucene/search/MultiPhraseQuery.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/MultiPhraseQuery.java b/lucene/core/src/java/org/apache/lucene/search/MultiPhraseQuery.java
index c76f7ea..65d6631 100644
--- a/lucene/core/src/java/org/apache/lucene/search/MultiPhraseQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/search/MultiPhraseQuery.java
@@ -295,7 +295,7 @@ public class MultiPhraseQuery extends Query {
                                       scoreMode, totalMatchCost);
       } else {
         return new SloppyPhraseScorer(this, postingsFreqs, slop,
-                                        new LeafSimScorer(stats, context.reader(), scoreMode.needsScores(), Float.POSITIVE_INFINITY),
+                                        new LeafSimScorer(stats, context.reader(), scoreMode.needsScores(), Float.MAX_VALUE),
                                         scoreMode.needsScores(), totalMatchCost);
       }
     }
@@ -312,7 +312,7 @@ public class MultiPhraseQuery extends Query {
         int newDoc = scorer.iterator().advance(doc);
         if (newDoc == doc) {
           float freq = slop == 0 ? ((ExactPhraseScorer)scorer).freq() : ((SloppyPhraseScorer)scorer).sloppyFreq();
-          LeafSimScorer docScorer = new LeafSimScorer(stats, context.reader(), scoreMode.needsScores(), Float.POSITIVE_INFINITY);
+          LeafSimScorer docScorer = new LeafSimScorer(stats, context.reader(), scoreMode.needsScores(), Float.MAX_VALUE);
           Explanation freqExplanation = Explanation.match(freq, "phraseFreq=" + freq);
           Explanation scoreExplanation = docScorer.explain(doc, freqExplanation);
           return Explanation.match(

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/java/org/apache/lucene/search/PhraseQuery.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/PhraseQuery.java b/lucene/core/src/java/org/apache/lucene/search/PhraseQuery.java
index 011771e..ff15388 100644
--- a/lucene/core/src/java/org/apache/lucene/search/PhraseQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/search/PhraseQuery.java
@@ -438,7 +438,7 @@ public class PhraseQuery extends Query {
                                       scoreMode, totalMatchCost);
       } else {
         return new SloppyPhraseScorer(this, postingsFreqs, slop,
-                                        new LeafSimScorer(stats, context.reader(), scoreMode.needsScores(), Float.POSITIVE_INFINITY),
+                                        new LeafSimScorer(stats, context.reader(), scoreMode.needsScores(), Float.MAX_VALUE),
                                         scoreMode.needsScores(), totalMatchCost);
       }
     }
@@ -460,7 +460,7 @@ public class PhraseQuery extends Query {
         int newDoc = scorer.iterator().advance(doc);
         if (newDoc == doc) {
           float freq = slop == 0 ? ((ExactPhraseScorer)scorer).freq() : ((SloppyPhraseScorer)scorer).sloppyFreq();
-          LeafSimScorer docScorer = new LeafSimScorer(stats, context.reader(), scoreMode.needsScores(), Float.POSITIVE_INFINITY);
+          LeafSimScorer docScorer = new LeafSimScorer(stats, context.reader(), scoreMode.needsScores(), Float.MAX_VALUE);
           Explanation freqExplanation = Explanation.match(freq, "phraseFreq=" + freq);
           Explanation scoreExplanation = docScorer.explain(doc, freqExplanation);
           return Explanation.match(

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/java/org/apache/lucene/search/SynonymQuery.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/SynonymQuery.java b/lucene/core/src/java/org/apache/lucene/search/SynonymQuery.java
index 10a5d42..d9335cf 100644
--- a/lucene/core/src/java/org/apache/lucene/search/SynonymQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/search/SynonymQuery.java
@@ -174,7 +174,7 @@ public final class SynonymQuery extends Query {
             assert scorer instanceof TermScorer;
             freq = ((TermScorer)scorer).freq();
           }
-          LeafSimScorer docScorer = new LeafSimScorer(simWeight, context.reader(), true, Float.POSITIVE_INFINITY);
+          LeafSimScorer docScorer = new LeafSimScorer(simWeight, context.reader(), true, Float.MAX_VALUE);
           Explanation freqExplanation = Explanation.match(freq, "termFreq=" + freq);
           Explanation scoreExplanation = docScorer.explain(doc, freqExplanation);
           return Explanation.match(

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/java/org/apache/lucene/search/similarities/Axiomatic.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/similarities/Axiomatic.java b/lucene/core/src/java/org/apache/lucene/search/similarities/Axiomatic.java
index 3865933..527c2fd 100644
--- a/lucene/core/src/java/org/apache/lucene/search/similarities/Axiomatic.java
+++ b/lucene/core/src/java/org/apache/lucene/search/similarities/Axiomatic.java
@@ -113,12 +113,6 @@ public abstract class Axiomatic extends SimilarityBase {
   }
 
   @Override
-  protected double maxScore(BasicStats stats, double maxFreq) {
-    // TODO: can we compute a better upper bound on the produced scores
-    return Double.POSITIVE_INFINITY;
-  }
-
-  @Override
   protected Explanation explain(
       BasicStats stats, Explanation freq, double docLen) {    
     List<Explanation> subs = new ArrayList<>();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/java/org/apache/lucene/search/similarities/BM25Similarity.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/similarities/BM25Similarity.java b/lucene/core/src/java/org/apache/lucene/search/similarities/BM25Similarity.java
index 09bef40..bd20bf9 100644
--- a/lucene/core/src/java/org/apache/lucene/search/similarities/BM25Similarity.java
+++ b/lucene/core/src/java/org/apache/lucene/search/similarities/BM25Similarity.java
@@ -220,12 +220,6 @@ public class BM25Similarity extends Similarity {
     }
 
     @Override
-    public float maxScore(float maxFreq) {
-      // TODO: leverage maxFreq and the min norm from the cache
-      return weight;
-    }
-
-    @Override
     public Explanation explain(Explanation freq, long encodedNorm) throws IOException {
       List<Explanation> subs = new ArrayList<>(explainConstantFactors());
       Explanation tfExpl = explainTF(freq, encodedNorm);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/java/org/apache/lucene/search/similarities/BooleanSimilarity.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/similarities/BooleanSimilarity.java b/lucene/core/src/java/org/apache/lucene/search/similarities/BooleanSimilarity.java
index 2690365..6f7d26b 100644
--- a/lucene/core/src/java/org/apache/lucene/search/similarities/BooleanSimilarity.java
+++ b/lucene/core/src/java/org/apache/lucene/search/similarities/BooleanSimilarity.java
@@ -64,11 +64,6 @@ public class BooleanSimilarity extends Similarity {
     }
 
     @Override
-    public float maxScore(float maxFreq) {
-      return boost;
-    }
-
-    @Override
     public Explanation explain(Explanation freq, long norm) throws IOException {
       Explanation queryBoostExpl = Explanation.match(boost, "boost, query boost");
       return Explanation.match(

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/java/org/apache/lucene/search/similarities/DFISimilarity.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/similarities/DFISimilarity.java b/lucene/core/src/java/org/apache/lucene/search/similarities/DFISimilarity.java
index 44da93c..f7f3d52 100644
--- a/lucene/core/src/java/org/apache/lucene/search/similarities/DFISimilarity.java
+++ b/lucene/core/src/java/org/apache/lucene/search/similarities/DFISimilarity.java
@@ -64,12 +64,6 @@ public class DFISimilarity extends SimilarityBase {
     return stats.getBoost() * log2(measure + 1);
   }
 
-  @Override
-  protected double maxScore(BasicStats stats, double maxFreq) {
-    // TODO: can we compute a better upper bound on the produced scores
-    return Double.POSITIVE_INFINITY;
-  }
-
   /**
    * Returns the measure of independence
    */

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/java/org/apache/lucene/search/similarities/DFRSimilarity.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/similarities/DFRSimilarity.java b/lucene/core/src/java/org/apache/lucene/search/similarities/DFRSimilarity.java
index 1677168..cbe6773 100644
--- a/lucene/core/src/java/org/apache/lucene/search/similarities/DFRSimilarity.java
+++ b/lucene/core/src/java/org/apache/lucene/search/similarities/DFRSimilarity.java
@@ -114,12 +114,6 @@ public class DFRSimilarity extends SimilarityBase {
   }
 
   @Override
-  protected double maxScore(BasicStats stats, double maxFreq) {
-    // TODO: can we compute a better upper bound on the produced scores
-    return Double.POSITIVE_INFINITY;
-  }
-
-  @Override
   protected void explain(List<Explanation> subs,
       BasicStats stats, double freq, double docLen) {
     if (stats.getBoost() != 1.0d) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/java/org/apache/lucene/search/similarities/IBSimilarity.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/similarities/IBSimilarity.java b/lucene/core/src/java/org/apache/lucene/search/similarities/IBSimilarity.java
index 231d554..d08bdab 100644
--- a/lucene/core/src/java/org/apache/lucene/search/similarities/IBSimilarity.java
+++ b/lucene/core/src/java/org/apache/lucene/search/similarities/IBSimilarity.java
@@ -105,12 +105,6 @@ public class IBSimilarity extends SimilarityBase {
   }
 
   @Override
-  protected double maxScore(BasicStats stats, double maxFreq) {
-    // TODO: can we compute a better upper bound on the produced scores
-    return Double.POSITIVE_INFINITY;
-  }
-
-  @Override
   protected void explain(
       List<Explanation> subs, BasicStats stats, double freq, double docLen) {
     if (stats.getBoost() != 1.0d) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/java/org/apache/lucene/search/similarities/LMDirichletSimilarity.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/similarities/LMDirichletSimilarity.java b/lucene/core/src/java/org/apache/lucene/search/similarities/LMDirichletSimilarity.java
index 7522c17..a66871c 100644
--- a/lucene/core/src/java/org/apache/lucene/search/similarities/LMDirichletSimilarity.java
+++ b/lucene/core/src/java/org/apache/lucene/search/similarities/LMDirichletSimilarity.java
@@ -78,12 +78,6 @@ public class LMDirichletSimilarity extends LMSimilarity {
   }
 
   @Override
-  protected double maxScore(BasicStats stats, double maxFreq) {
-    // TODO: can we compute a better upper bound on the produced scores
-    return Double.POSITIVE_INFINITY;
-  }
-
-  @Override
   protected void explain(List<Explanation> subs, BasicStats stats,
       double freq, double docLen) {
     if (stats.getBoost() != 1.0d) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/java/org/apache/lucene/search/similarities/LMJelinekMercerSimilarity.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/similarities/LMJelinekMercerSimilarity.java b/lucene/core/src/java/org/apache/lucene/search/similarities/LMJelinekMercerSimilarity.java
index dde0650..3f4f41a 100644
--- a/lucene/core/src/java/org/apache/lucene/search/similarities/LMJelinekMercerSimilarity.java
+++ b/lucene/core/src/java/org/apache/lucene/search/similarities/LMJelinekMercerSimilarity.java
@@ -68,12 +68,6 @@ public class LMJelinekMercerSimilarity extends LMSimilarity {
   }
 
   @Override
-  protected double maxScore(BasicStats stats, double maxFreq) {
-    // TODO: can we compute a better upper bound on the produced scores
-    return Double.POSITIVE_INFINITY;
-  }
-
-  @Override
   protected void explain(List<Explanation> subs, BasicStats stats,
       double freq, double docLen) {
     if (stats.getBoost() != 1.0d) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/java/org/apache/lucene/search/similarities/MultiSimilarity.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/similarities/MultiSimilarity.java b/lucene/core/src/java/org/apache/lucene/search/similarities/MultiSimilarity.java
index 3526db4..de2ea7f 100644
--- a/lucene/core/src/java/org/apache/lucene/search/similarities/MultiSimilarity.java
+++ b/lucene/core/src/java/org/apache/lucene/search/similarities/MultiSimilarity.java
@@ -74,15 +74,6 @@ public class MultiSimilarity extends Similarity {
     }
 
     @Override
-    public float maxScore(float freq) {
-      float sumMaxScore = 0;
-      for (SimScorer subScorer : subScorers) {
-        sumMaxScore += subScorer.maxScore(freq);
-      }
-      return sumMaxScore;
-    }
-
-    @Override
     public Explanation explain(Explanation freq, long norm) throws IOException {
       List<Explanation> subs = new ArrayList<>();
       for (SimScorer subScorer : subScorers) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/java/org/apache/lucene/search/similarities/Similarity.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/similarities/Similarity.java b/lucene/core/src/java/org/apache/lucene/search/similarities/Similarity.java
index a2ebe4a..7479fff 100644
--- a/lucene/core/src/java/org/apache/lucene/search/similarities/Similarity.java
+++ b/lucene/core/src/java/org/apache/lucene/search/similarities/Similarity.java
@@ -106,7 +106,17 @@ public abstract class Similarity {
    * <p>Matches in longer fields are less precise, so implementations of this
    * method usually set smaller values when <code>state.getLength()</code> is large,
    * and larger values when <code>state.getLength()</code> is small.
-   * 
+   *
+   * <p>Note that for a given term-document frequency, greater unsigned norms
+   * must produce scores that are lower or equal, ie. for two encoded norms
+   * {@code n1} and {@code n2} so that
+   * {@code Long.compareUnsigned(n1, n2) &gt; 0} then
+   * {@code SimScorer.score(freq, n1) &lt;= SimScorer.score(freq, n2)}
+   * for any legal {@code freq}.
+   *
+   * <p>{@code 0} is not a legal norm, so {@code 1} is the norm that produces
+   * the highest scores.
+   *
    * @lucene.experimental
    * 
    * @param state current processing state for this field
@@ -148,21 +158,31 @@ public abstract class Similarity {
     }
 
     /**
-     * Score a single document
-     * @param freq sloppy term frequency
-     * @param norm encoded normalization factor, as returned by {@link Similarity#computeNorm}, or {@code 1} if norms are disabled
+     * Score a single document. {@code freq} is the document-term sloppy
+     * frequency and must be finite and positive. {@code norm} is the
+     * encoded normalization factor as computed by
+     * {@link Similarity#computeNorm(FieldInvertState)} at index time, or
+     * {@code 1} if norms are disabled. {@code norm} is never {@code 0}.
+     * <p>
+     * Score must not decrease when {@code freq} increases, ie. if
+     * {@code freq1 &gt; freq2}, then {@code score(freq1, norm) &gt;=
+     * score(freq2, norm)} for any value of {@code norm} that may be produced
+     * by {@link Similarity#computeNorm(FieldInvertState)}.
+     * <p>
+     * Score must not increase when the unsigned {@code norm} increases, ie. if
+     * {@code Long.compareUnsigned(norm1, norm2) &gt; 0} then
+     * {@code score(freq, norm1) &lt;= score(freq, norm2)} for any legal
+     * {@code freq}.
+     * <p>
+     * As a consequence, the maximum score that this scorer can produce is bound
+     * by {@code score(Float.MAX_VALUE, 1)}.
+     * @param freq sloppy term frequency, must be finite and positive
+     * @param norm encoded normalization factor or {@code 1} if norms are disabled
      * @return document's score
      */
     public abstract float score(float freq, long norm) throws IOException;
 
     /**
-     * Return the maximum score that this scorer may produce for freqs in {@code ]0, maxFreq]}.
-     * {@code Float.POSITIVE_INFINITY} is a fine return value if scores are not bounded.
-     * @param maxFreq the maximum frequency
-     */
-    public abstract float maxScore(float maxFreq);
-
-    /**
      * Explain the score for a single document
      * @param freq Explanation of how the sloppy term frequency was computed
      * @param norm encoded normalization factor, as returned by {@link Similarity#computeNorm}, or {@code 1} if norms are disabled

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/java/org/apache/lucene/search/similarities/SimilarityBase.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/similarities/SimilarityBase.java b/lucene/core/src/java/org/apache/lucene/search/similarities/SimilarityBase.java
index f750b12..f9dd636 100644
--- a/lucene/core/src/java/org/apache/lucene/search/similarities/SimilarityBase.java
+++ b/lucene/core/src/java/org/apache/lucene/search/similarities/SimilarityBase.java
@@ -125,13 +125,6 @@ public abstract class SimilarityBase extends Similarity {
   protected abstract double score(BasicStats stats, double freq, double docLen);
 
   /**
-   * Return the maximum value that may be returned by {@link #score(BasicStats, double, double)}
-   * for the given stats.
-   * @see org.apache.lucene.search.similarities.Similarity.SimScorer#maxScore(float)
-   */
-  protected abstract double maxScore(BasicStats stats, double maxFreq);
-
-  /**
    * Subclasses should implement this method to explain the score. {@code expl}
    * already contains the score, the name of the class and the doc id, as well
    * as the term frequency and its explanation; subclasses can add additional
@@ -234,11 +227,6 @@ public abstract class SimilarityBase extends Similarity {
     }
 
     @Override
-    public float maxScore(float maxFreq) {
-      return (float) SimilarityBase.this.maxScore(stats, maxFreq);
-    }
-
-    @Override
     public Explanation explain(Explanation freq, long norm) throws IOException {
       return SimilarityBase.this.explain(stats, freq, getLengthValue(norm));
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/java/org/apache/lucene/search/similarities/TFIDFSimilarity.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/similarities/TFIDFSimilarity.java b/lucene/core/src/java/org/apache/lucene/search/similarities/TFIDFSimilarity.java
index de317d0..9e4b5bf 100644
--- a/lucene/core/src/java/org/apache/lucene/search/similarities/TFIDFSimilarity.java
+++ b/lucene/core/src/java/org/apache/lucene/search/similarities/TFIDFSimilarity.java
@@ -550,16 +550,6 @@ public abstract class TFIDFSimilarity extends Similarity {
     }
 
     @Override
-    public float maxScore(float maxFreq) {
-      final float raw = tf(maxFreq) * queryWeight;
-      float maxNormValue = Float.NEGATIVE_INFINITY;
-      for (float norm : normTable) {
-        maxNormValue = Math.max(maxNormValue, norm);
-      }
-      return raw * maxNormValue;
-    }
-
-    @Override
     public Explanation explain(Explanation freq, long norm) throws IOException {
       return explainScore(freq, norm, normTable);
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/java/org/apache/lucene/search/spans/SpanWeight.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/spans/SpanWeight.java b/lucene/core/src/java/org/apache/lucene/search/spans/SpanWeight.java
index e971610..25b58fd 100644
--- a/lucene/core/src/java/org/apache/lucene/search/spans/SpanWeight.java
+++ b/lucene/core/src/java/org/apache/lucene/search/spans/SpanWeight.java
@@ -140,7 +140,7 @@ public abstract class SpanWeight extends Weight {
    * @throws IOException on error
    */
   public LeafSimScorer getSimScorer(LeafReaderContext context) throws IOException {
-    return simScorer == null ? null : new LeafSimScorer(simScorer, context.reader(), true, Float.POSITIVE_INFINITY);
+    return simScorer == null ? null : new LeafSimScorer(simScorer, context.reader(), true, Float.MAX_VALUE);
   }
 
   @Override
@@ -150,7 +150,7 @@ public abstract class SpanWeight extends Weight {
       int newDoc = scorer.iterator().advance(doc);
       if (newDoc == doc) {
         float freq = scorer.sloppyFreq();
-        LeafSimScorer docScorer = new LeafSimScorer(simScorer, context.reader(), true, Float.POSITIVE_INFINITY);
+        LeafSimScorer docScorer = new LeafSimScorer(simScorer, context.reader(), true, Float.MAX_VALUE);
         Explanation freqExplanation = Explanation.match(freq, "phraseFreq=" + freq);
         Explanation scoreExplanation = docScorer.explain(doc, freqExplanation);
         return Explanation.match(scoreExplanation.getValue(),

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/test/org/apache/lucene/index/TestMaxTermFrequency.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestMaxTermFrequency.java b/lucene/core/src/test/org/apache/lucene/index/TestMaxTermFrequency.java
index cf29392..7cc39b3 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestMaxTermFrequency.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestMaxTermFrequency.java
@@ -117,10 +117,6 @@ public class TestMaxTermFrequency extends LuceneTestCase {
           return 0;
         }
 
-        @Override
-        public float maxScore(float maxFreq) {
-          return 0;
-        }
       };
     }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/test/org/apache/lucene/search/TestBooleanQueryVisitSubscorers.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestBooleanQueryVisitSubscorers.java b/lucene/core/src/test/org/apache/lucene/search/TestBooleanQueryVisitSubscorers.java
index 37a1b57..0d7f4e6 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestBooleanQueryVisitSubscorers.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestBooleanQueryVisitSubscorers.java
@@ -334,10 +334,6 @@ public class TestBooleanQueryVisitSubscorers extends LuceneTestCase {
         public float score(float freq, long norm) throws IOException {
           return freq;
         }
-        @Override
-        public float maxScore(float maxFreq) {
-          return maxFreq;
-        }
       };
     }
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/test/org/apache/lucene/search/TestConjunctions.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestConjunctions.java b/lucene/core/src/test/org/apache/lucene/search/TestConjunctions.java
index 9b79675..4cfa4d3 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestConjunctions.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestConjunctions.java
@@ -106,11 +106,6 @@ public class TestConjunctions extends LuceneTestCase {
         public float score(float freq, long norm) {
           return freq;
         }
-
-        @Override
-        public float maxScore(float maxFreq) {
-          return maxFreq;
-        }
       };
     }
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/test/org/apache/lucene/search/TestSimilarityProvider.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestSimilarityProvider.java b/lucene/core/src/test/org/apache/lucene/search/TestSimilarityProvider.java
index f0e3b22..f99a674 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestSimilarityProvider.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestSimilarityProvider.java
@@ -119,11 +119,6 @@ public class TestSimilarityProvider extends LuceneTestCase {
         public float score(float freq, long norm) throws IOException {
           return 1;
         }
-
-        @Override
-        public float maxScore(float maxFreq) {
-          return 1;
-        }
       };
     }
 
@@ -139,16 +134,10 @@ public class TestSimilarityProvider extends LuceneTestCase {
     @Override
     public SimScorer scorer(float boost, CollectionStatistics collectionStats, TermStatistics... termStats) {
       return new SimScorer(collectionStats.field()) {
-
         @Override
         public float score(float freq, long norm) throws IOException {
           return 10;
         }
-
-        @Override
-        public float maxScore(float maxFreq) {
-          return 10;
-        }
       };
     }
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/core/src/test/org/apache/lucene/search/TestSubScorerFreqs.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestSubScorerFreqs.java b/lucene/core/src/test/org/apache/lucene/search/TestSubScorerFreqs.java
index 1cc4d59..c3bfcb3 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestSubScorerFreqs.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestSubScorerFreqs.java
@@ -236,11 +236,6 @@ public class TestSubScorerFreqs extends LuceneTestCase {
         public float score(float freq, long norm) throws IOException {
           return freq;
         }
-
-        @Override
-        public float maxScore(float maxFreq) {
-          return maxFreq;
-        }
       };
     }
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java
----------------------------------------------------------------------
diff --git a/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java b/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java
index d70beaf..c90bfdc 100644
--- a/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java
+++ b/lucene/join/src/test/org/apache/lucene/search/join/TestBlockJoin.java
@@ -1489,11 +1489,6 @@ public class TestBlockJoin extends LuceneTestCase {
       protected double score(BasicStats stats, double freq, double docLen) {
         return freq;
       }
-
-      @Override
-      protected double maxScore(BasicStats stats, double maxFreq) {
-        return maxFreq;
-      }
     };
     Directory dir = newDirectory();
     RandomIndexWriter w = new RandomIndexWriter(random(), dir, newIndexWriterConfig().setSimilarity(sim));

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/queries/src/java/org/apache/lucene/queries/function/valuesource/NormValueSource.java
----------------------------------------------------------------------
diff --git a/lucene/queries/src/java/org/apache/lucene/queries/function/valuesource/NormValueSource.java b/lucene/queries/src/java/org/apache/lucene/queries/function/valuesource/NormValueSource.java
index 682c0c0..662f80d 100644
--- a/lucene/queries/src/java/org/apache/lucene/queries/function/valuesource/NormValueSource.java
+++ b/lucene/queries/src/java/org/apache/lucene/queries/function/valuesource/NormValueSource.java
@@ -71,7 +71,7 @@ public class NormValueSource extends ValueSource {
     final SimScorer simScorer = similarity.scorer(1f,
         new CollectionStatistics(field, 1, 1, 1, 1),
         new TermStatistics(new BytesRef("bogus"), 1, 1));
-    final LeafSimScorer leafSimScorer = new LeafSimScorer(simScorer, readerContext.reader(), true, Float.POSITIVE_INFINITY);
+    final LeafSimScorer leafSimScorer = new LeafSimScorer(simScorer, readerContext.reader(), true, Float.MAX_VALUE);
     
     return new FloatDocValues(this) {
       int lastDocID = -1;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/sandbox/src/java/org/apache/lucene/search/TermAutomatonQuery.java
----------------------------------------------------------------------
diff --git a/lucene/sandbox/src/java/org/apache/lucene/search/TermAutomatonQuery.java b/lucene/sandbox/src/java/org/apache/lucene/search/TermAutomatonQuery.java
index b877976..42a5f74 100644
--- a/lucene/sandbox/src/java/org/apache/lucene/search/TermAutomatonQuery.java
+++ b/lucene/sandbox/src/java/org/apache/lucene/search/TermAutomatonQuery.java
@@ -397,7 +397,7 @@ public class TermAutomatonQuery extends Query {
       }
 
       if (any) {
-        return new TermAutomatonScorer(this, enums, anyTermID, idToTerm, new LeafSimScorer(stats, context.reader(), true, Float.POSITIVE_INFINITY));
+        return new TermAutomatonScorer(this, enums, anyTermID, idToTerm, new LeafSimScorer(stats, context.reader(), true, Float.MAX_VALUE));
       } else {
         return null;
       }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/test-framework/src/java/org/apache/lucene/search/similarities/AssertingSimilarity.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/search/similarities/AssertingSimilarity.java b/lucene/test-framework/src/java/org/apache/lucene/search/similarities/AssertingSimilarity.java
index afc33ba..bedfe73 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/search/similarities/AssertingSimilarity.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/search/similarities/AssertingSimilarity.java
@@ -43,7 +43,9 @@ public class AssertingSimilarity extends Similarity {
     assert state.getNumOverlap() < state.getLength();
     assert state.getUniqueTermCount() > 0;
     assert state.getUniqueTermCount() <= state.getLength();
-    return delegate.computeNorm(state);
+    long norm = delegate.computeNorm(state);
+    assert norm != 0;
+    return norm;
   }
 
   @Override
@@ -78,19 +80,12 @@ public class AssertingSimilarity extends Similarity {
       // result in bounds
       float score = delegate.score(freq, norm);
       assert Float.isFinite(score);
-      assert score <= maxScore(freq);
+      assert score <= delegate.score(freq, 1);
       assert score >= 0;
       return score;
     }
 
     @Override
-    public float maxScore(float maxFreq) {
-      float maxScore = delegate.maxScore(maxFreq);
-      assert Float.isNaN(maxScore) == false;
-      return maxScore;
-    }
-
-    @Override
     public Explanation explain(Explanation freq, long norm) throws IOException {
       // freq in bounds 
       assert freq != null;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/838c604b/lucene/test-framework/src/java/org/apache/lucene/search/similarities/BaseSimilarityTestCase.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/search/similarities/BaseSimilarityTestCase.java b/lucene/test-framework/src/java/org/apache/lucene/search/similarities/BaseSimilarityTestCase.java
index 348584e..dcd6534 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/search/similarities/BaseSimilarityTestCase.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/search/similarities/BaseSimilarityTestCase.java
@@ -346,12 +346,14 @@ public abstract class BaseSimilarityTestCase extends LuceneTestCase {
     boolean success = false;
     SimScorer scorer = similarity.scorer(boost, corpus, term);
     try {
+      float maxScore = scorer.score(Float.MAX_VALUE, 1);
+      assertFalse("maxScore is NaN", Float.isNaN(maxScore));
+
       float score = scorer.score(freq, norm);
       // check that score isn't infinite or negative
       assertTrue("infinite/NaN score: " + score, Float.isFinite(score));
       assertTrue("negative score: " + score, score >= 0);
-      float maxScore = scorer.maxScore(freq);
-      assertTrue("score > maxScore: " + score + " > " + maxScore, score <= maxScore);
+      assertTrue("greater than maxScore: " + score + ">" + maxScore, score <= maxScore);
       // check explanation matches
       Explanation explanation = scorer.explain(Explanation.match(freq, "freq, occurrences of term within document"), norm);
       if (score != explanation.getValue().doubleValue()) {