You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2011/06/15 16:29:46 UTC

svn commit: r1136069 - in /lucene/dev/branches/flexscoring/lucene/src: java/org/apache/lucene/search/TFIDFSimilarity.java test/org/apache/lucene/search/MockLMSimilarity.java

Author: rmuir
Date: Wed Jun 15 14:29:46 2011
New Revision: 1136069

URL: http://svn.apache.org/viewvc?rev=1136069&view=rev
Log:
remove potentially-hotspot-confusing specializations

Modified:
    lucene/dev/branches/flexscoring/lucene/src/java/org/apache/lucene/search/TFIDFSimilarity.java
    lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/search/MockLMSimilarity.java

Modified: lucene/dev/branches/flexscoring/lucene/src/java/org/apache/lucene/search/TFIDFSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/lucene/src/java/org/apache/lucene/search/TFIDFSimilarity.java?rev=1136069&r1=1136068&r2=1136069&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/lucene/src/java/org/apache/lucene/search/TFIDFSimilarity.java (original)
+++ lucene/dev/branches/flexscoring/lucene/src/java/org/apache/lucene/search/TFIDFSimilarity.java Wed Jun 15 14:29:46 2011
@@ -696,23 +696,16 @@ public abstract class TFIDFSimilarity ex
 
   @Override
   public final ExactDocScorer exactDocScorer(Weight weight, String fieldName, AtomicReaderContext context) throws IOException {
-    final byte norms[] = context.reader.norms(fieldName);
-    return norms == null
-    ? new RawExactTFIDFDocScorer(weight.getValue())
-    : new ExactTFIDFDocScorer(weight.getValue(), norms);
+    return new ExactTFIDFDocScorer(weight.getValue(), context.reader.norms(fieldName));
   }
 
   @Override
   public final SloppyDocScorer sloppyDocScorer(Weight weight, String fieldName, AtomicReaderContext context) throws IOException {
-    final byte norms[] = context.reader.norms(fieldName);
-    return norms == null
-    ? new RawSloppyTFIDFDocScorer(weight.getValue())
-    : new SloppyTFIDFDocScorer(weight.getValue(), norms);
+    return new SloppyTFIDFDocScorer(weight.getValue(), context.reader.norms(fieldName));
   }
   
-  // nocommit: below are specialized classes, we should test if it really helps to avoid the 'if' for omitNorms, etc
-  // nocommit: make SCORE_CACHE_SIZE dynamic when available? (e.g. totalTermFreq / docFreq)
-  // nocommit: make configurable?
+  // TODO: we can specialize these for omitNorms up front, but we should test that it doesn't confuse stupid hotspot.
+
   private final class ExactTFIDFDocScorer extends ExactDocScorer {
     private final float weightValue;
     private final byte[] norms;
@@ -728,31 +721,12 @@ public abstract class TFIDFSimilarity ex
     
     @Override
     public float score(int doc, int freq) {
-      float raw =                                   // compute tf(f)*weight
+      final float raw =                                // compute tf(f)*weight
         freq < SCORE_CACHE_SIZE                        // check cache
         ? scoreCache[freq]                             // cache hit
         : tf(freq)*weightValue;        // cache miss
 
-      return raw * decodeNormValue(norms[doc]); // normalize for field
-    }
-  }
-  
-  private final class RawExactTFIDFDocScorer extends ExactDocScorer {
-    private final float weightValue;
-    private static final int SCORE_CACHE_SIZE = 32;
-    private float[] scoreCache = new float[SCORE_CACHE_SIZE];
-    
-    RawExactTFIDFDocScorer(float weightValue) {
-      this.weightValue = weightValue;
-      for (int i = 0; i < SCORE_CACHE_SIZE; i++)
-        scoreCache[i] = tf(i) * weightValue;
-    }
-    
-    @Override
-    public float score(int doc, int freq) {
-      return freq < SCORE_CACHE_SIZE                        // check cache
-        ? scoreCache[freq]                             // cache hit
-        : tf(freq)*weightValue;        // cache miss
+      return norms == null ? raw : raw * decodeNormValue(norms[doc]); // normalize for field
     }
   }
   
@@ -767,20 +741,9 @@ public abstract class TFIDFSimilarity ex
     
     @Override
     public float score(int doc, float freq) {
-      return tf(freq) * weightValue * decodeNormValue(norms[doc]); // compute tf(f)*weight * normalize for field
-    }
-  }
-  
-  private final class RawSloppyTFIDFDocScorer extends SloppyDocScorer {
-    private final float weightValue;
-    
-    RawSloppyTFIDFDocScorer(float weightValue) {
-      this.weightValue = weightValue;
-    }
-    
-    @Override
-    public float score(int doc, float freq) {
-      return tf(freq)*weightValue;        // compute tf(f)*weight
+      final float raw = tf(freq) * weightValue; // compute tf(f)*weight
+      
+      return norms == null ? raw : raw * decodeNormValue(norms[doc]);  // normalize for field
     }
   }
 }

Modified: lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/search/MockLMSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/search/MockLMSimilarity.java?rev=1136069&r1=1136068&r2=1136069&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/search/MockLMSimilarity.java (original)
+++ lucene/dev/branches/flexscoring/lucene/src/test/org/apache/lucene/search/MockLMSimilarity.java Wed Jun 15 14:29:46 2011
@@ -119,11 +119,7 @@ public class MockLMSimilarity extends Si
 
   @Override
   public ExactDocScorer exactDocScorer(Weight weight, String fieldName, AtomicReaderContext context) throws IOException {
-    float unsquaredWeight = (float) Math.sqrt(weight.getValue());
-    final byte norms[] = context.reader.norms(fieldName);
-    return norms == null
-    ? new RawExactMockLMDocScorer(unsquaredWeight)
-    : new ExactMockLMDocScorer(unsquaredWeight, norms);
+    return new ExactMockLMDocScorer((float) Math.sqrt(weight.getValue()), context.reader.norms(fieldName));
   }
 
   @Override
@@ -149,32 +145,14 @@ public class MockLMSimilarity extends Si
     
     @Override
     public float score(int doc, int freq) {
-      return freq < SCORE_CACHE_SIZE                        // check cache
-      ? scoreCache[freq] + decodeNormValue(norms[doc])      // cache hit
-      : (float)Math.log(1 + (freq*weightValue)) + decodeNormValue(norms[doc]);  // cache miss
+      final float raw = freq < SCORE_CACHE_SIZE // check cache
+      ? scoreCache[freq]  // cache hit
+      : (float)Math.log(1 + (freq*weightValue)); // cache miss
+      
+      return norms == null ? raw : raw + decodeNormValue(norms[doc]);
     }
   }
   
-  private class RawExactMockLMDocScorer extends ExactDocScorer {
-    private final float weightValue;
-    private static final int SCORE_CACHE_SIZE = 32;
-    private float[] scoreCache = new float[SCORE_CACHE_SIZE];
-    
-    RawExactMockLMDocScorer(float weightValue) {
-      this.weightValue = weightValue;
-      for (int i = 0; i < SCORE_CACHE_SIZE; i++)
-        scoreCache[i] = (float)Math.log(1 + (i*weightValue));
-    }
-    
-    @Override
-    public float score(int doc, int freq) {
-      return freq < SCORE_CACHE_SIZE    // check cache
-      ? scoreCache[freq]                // cache hit
-      : (float)Math.log(1 + (freq*weightValue));  // cache miss
-    }
-  }
-  
-  // TODO: worth specializing?
   private class SloppyMockLMDocScorer extends SloppyDocScorer {
     private final float weightValue;
     private final byte[] norms;
@@ -186,8 +164,8 @@ public class MockLMSimilarity extends Si
     
     @Override
     public float score(int doc, float freq) {
-      final float norm = (norms == null) ? 0 : decodeNormValue(norms[doc]);
-      return (float)Math.log(1 + (freq*weightValue)) + norm;
+      final float raw = (float)Math.log(1 + (freq*weightValue));
+      return norms == null ? raw : raw + decodeNormValue(norms[doc]);
     }
   }
 }