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]);
}
}
}