Index: src/java/org/apache/lucene/search/MultiPhraseQuery.java
===================================================================
--- src/java/org/apache/lucene/search/MultiPhraseQuery.java (revision 828825)
+++ src/java/org/apache/lucene/search/MultiPhraseQuery.java (working copy)
@@ -134,9 +134,10 @@
this.similarity = getSimilarity(searcher);
// compute idf
+ final int maxDoc = searcher.maxDoc();
for(final Term[] terms: termArrays) {
for (Term term: terms) {
- idf += getSimilarity(searcher).idf(term, searcher);
+ idf += this.similarity.idf(searcher.docFreq(term), maxDoc);
}
}
}
Index: src/java/org/apache/lucene/search/Similarity.java
===================================================================
--- src/java/org/apache/lucene/search/Similarity.java (revision 828825)
+++ src/java/org/apache/lucene/search/Similarity.java (working copy)
@@ -704,27 +704,6 @@
*/
public abstract float tf(float freq);
- /** Computes a score factor for a simple term.
- *
- *
The default implementation is:
- * return idf(searcher.docFreq(term), searcher.maxDoc());
- *
- *
- * Note that {@link Searcher#maxDoc()} is used instead of
- * {@link org.apache.lucene.index.IndexReader#numDocs() IndexReader#numDocs()} because also
- * {@link Searcher#docFreq(Term)} is used, and when the latter
- * is inaccurate, so is {@link Searcher#maxDoc()}, and in the same direction.
- * In addition, {@link Searcher#maxDoc()} is more efficient to compute
- *
- * @param term the term in question
- * @param searcher the document collection being searched
- * @return a score factor for the term
- * @deprecated see {@link #idfExplain(Term, Searcher)}
- */
- public float idf(Term term, Searcher searcher) throws IOException {
- return idf(searcher.docFreq(term), searcher.maxDoc());
- }
-
/**
* Computes a score factor for a simple term and returns an explanation
* for that score factor.
@@ -749,19 +728,6 @@
* @throws IOException
*/
public IDFExplanation idfExplain(final Term term, final Searcher searcher) throws IOException {
- if(supportedMethods.overridesTermIDF) {
- final float idf = idf(term, searcher);
- return new IDFExplanation() {
- @Override
- public float getIdf() {
- return idf;
- }
- @Override
- public String explain() {
- return "Inexplicable";
- }
- };
- }
final int df = searcher.docFreq(term);
final int max = searcher.maxDoc();
final float idf = idf(df, max);
@@ -777,25 +743,6 @@
}};
}
- /** Computes a score factor for a phrase.
- *
- * The default implementation sums the {@link #idf(Term,Searcher)} factor
- * for each term in the phrase.
- *
- * @param terms the terms in the phrase
- * @param searcher the document collection being searched
- * @return idf score factor
- * @deprecated see {@link #idfExplain(Collection, Searcher)}
- */
- public float idf(Collection terms, Searcher searcher) throws IOException {
- float idf = 0.0f;
-
- for(final Term term: terms) {
- idf += idf(term, searcher);
- }
- return idf;
- }
-
/**
* Computes a score factor for a phrase.
*
@@ -811,19 +758,6 @@
* @throws IOException
*/
public IDFExplanation idfExplain(Collection terms, Searcher searcher) throws IOException {
- if(supportedMethods.overridesCollectionIDF) {
- final float idf = idf(terms, searcher);
- return new IDFExplanation() {
- @Override
- public float getIdf() {
- return idf;
- }
- @Override
- public String explain() {
- return "Inexplicable";
- }
- };
- }
final int max = searcher.maxDoc();
float idf = 0.0f;
final StringBuilder exp = new StringBuilder();
@@ -877,9 +811,6 @@
*/
public abstract float coord(int overlap, int maxOverlap);
-
-
-
/**
* Calculate a scoring factor based on the data in the payload. Overriding implementations
* are responsible for interpreting what is in the payload. Lucene makes no assumptions about
@@ -887,28 +818,6 @@
*
* The default implementation returns 1.
*
- * @param fieldName The fieldName of the term this payload belongs to
- * @param payload The payload byte array to be scored
- * @param offset The offset into the payload array
- * @param length The length in the array
- * @return An implementation dependent float to be used as a scoring factor
- *
- * @deprecated See {@link #scorePayload(int, String, int, int, byte[], int, int)}
- */
- //TODO: When removing this, set the default value below to return 1.
- public float scorePayload(String fieldName, byte [] payload, int offset, int length)
- {
- //Do nothing
- return 1;
- }
-
- /**
- * Calculate a scoring factor based on the data in the payload. Overriding implementations
- * are responsible for interpreting what is in the payload. Lucene makes no assumptions about
- * what is in the byte array.
- *
- * The default implementation returns 1.
- *
* @param docId The docId currently being scored. If this value is {@link #NO_DOC_ID_PROVIDED}, then it should be assumed that the PayloadQuery implementation does not provide document information
* @param fieldName The fieldName of the term this payload belongs to
* @param start The start position of the payload
@@ -921,48 +830,9 @@
*/
public float scorePayload(int docId, String fieldName, int start, int end, byte [] payload, int offset, int length)
{
- //TODO: When removing the deprecated scorePayload above, set this to return 1
- return scorePayload(fieldName, payload, offset, length);
+ return 1;
}
- /** @deprecated Remove this when old API is removed! */
- private final MethodSupport supportedMethods = getSupportedMethods(this.getClass());
-
- /** @deprecated Remove this when old API is removed! */
- private static final class MethodSupport implements Serializable {
- final boolean overridesCollectionIDF, overridesTermIDF;
-
- MethodSupport(Class extends Similarity> clazz) {
- overridesCollectionIDF = isMethodOverridden(clazz, "idf", Collection.class, Searcher.class);
- overridesTermIDF = isMethodOverridden(clazz, "idf", Term.class, Searcher.class);
- }
-
- private static boolean isMethodOverridden(Class> clazz, String name, Class... params) {
- try {
- return clazz.getMethod(name, params).getDeclaringClass() != Similarity.class;
- } catch (NoSuchMethodException e) {
- // should not happen
- throw new RuntimeException(e);
- }
- }
- }
-
- /** @deprecated Remove this when old API is removed! */
- private static final IdentityHashMap,MethodSupport> knownMethodSupport
- = new IdentityHashMap,MethodSupport>();
-
- /** @deprecated Remove this when old API is removed! */
- private static MethodSupport getSupportedMethods(Class extends Similarity> clazz) {
- MethodSupport supportedMethods;
- synchronized(knownMethodSupport) {
- supportedMethods = (MethodSupport) knownMethodSupport.get(clazz);
- if (supportedMethods == null) {
- knownMethodSupport.put(clazz, supportedMethods = new MethodSupport(clazz));
- }
- }
- return supportedMethods;
- }
-
/** The Similarity implementation used by default.
* TODO: move back to top when old API is removed!
**/
Index: src/java/org/apache/lucene/search/SimilarityDelegator.java
===================================================================
--- src/java/org/apache/lucene/search/SimilarityDelegator.java (revision 828825)
+++ src/java/org/apache/lucene/search/SimilarityDelegator.java (working copy)
@@ -62,7 +62,7 @@
return delegee.coord(overlap, maxOverlap);
}
- public float scorePayload(String fieldName, byte[] payload, int offset, int length) {
- return delegee.scorePayload(fieldName, payload, offset, length);
+ public float scorePayload(int docId, String fieldName, int start, int end, byte [] payload, int offset, int length) {
+ return delegee.scorePayload(docId, fieldName, start, end, payload, offset, length);
}
}
Index: src/test/org/apache/lucene/index/TestOmitTf.java
===================================================================
--- src/test/org/apache/lucene/index/TestOmitTf.java (revision 828825)
+++ src/test/org/apache/lucene/index/TestOmitTf.java (working copy)
@@ -36,23 +36,32 @@
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.MockRAMDirectory;
+import org.apache.lucene.search.Explanation.IDFExplanation;
public class TestOmitTf extends LuceneTestCase {
public static class SimpleSimilarity extends Similarity {
- public float lengthNorm(String field, int numTerms) { return 1.0f; }
- public float queryNorm(float sumOfSquaredWeights) { return 1.0f; }
-
- public float tf(float freq) { return freq; }
-
- public float sloppyFreq(int distance) { return 2.0f; }
- public float idf(Collection terms, Searcher searcher) { return 1.0f; }
- public float idf(int docFreq, int numDocs) { return 1.0f; }
- public float coord(int overlap, int maxOverlap) { return 1.0f; }
+ @Override public float lengthNorm(String field, int numTerms) { return 1.0f; }
+ @Override public float queryNorm(float sumOfSquaredWeights) { return 1.0f; }
+ @Override public float tf(float freq) { return freq; }
+ @Override public float sloppyFreq(int distance) { return 2.0f; }
+ @Override public float idf(int docFreq, int numDocs) { return 1.0f; }
+ @Override public float coord(int overlap, int maxOverlap) { return 1.0f; }
+ @Override public IDFExplanation idfExplain(Collection terms, Searcher searcher) throws IOException {
+ return new IDFExplanation() {
+ @Override
+ public float getIdf() {
+ return 1.0f;
+ }
+ @Override
+ public String explain() {
+ return "Inexplicable";
+ }
+ };
+ }
}
-
// Tests whether the DocumentWriter correctly enable the
// omitTermFreqAndPositions bit in the FieldInfo
public void testOmitTermFreqAndPositions() throws Exception {
Index: src/test/org/apache/lucene/search/payloads/TestPayloadNearQuery.java
===================================================================
--- src/test/org/apache/lucene/search/payloads/TestPayloadNearQuery.java (revision 828825)
+++ src/test/org/apache/lucene/search/payloads/TestPayloadNearQuery.java (working copy)
@@ -41,6 +41,7 @@
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.util.English;
import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.search.Explanation.IDFExplanation;
public class TestPayloadNearQuery extends LuceneTestCase {
@@ -223,35 +224,45 @@
// must be static for weight serialization tests
static class BoostingSimilarity extends DefaultSimilarity {
- // TODO: Remove warning after API has been finalized
- public float scorePayload(int docId, String fieldName, int start, int end, byte[] payload, int offset, int length) {
+ @Override public float scorePayload(int docId, String fieldName, int start, int end, byte[] payload, int offset, int length) {
//we know it is size 4 here, so ignore the offset/length
return payload[0];
}
+
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//Make everything else 1 so we see the effect of the payload
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- public float lengthNorm(String fieldName, int numTerms) {
- return 1;
+ @Override public float lengthNorm(String fieldName, int numTerms) {
+ return 1.0f;
}
- public float queryNorm(float sumOfSquaredWeights) {
- return 1;
+ @Override public float queryNorm(float sumOfSquaredWeights) {
+ return 1.0f;
}
- public float sloppyFreq(int distance) {
- return 1;
+ @Override public float sloppyFreq(int distance) {
+ return 1.0f;
}
- public float coord(int overlap, int maxOverlap) {
- return 1;
+ @Override public float coord(int overlap, int maxOverlap) {
+ return 1.0f;
}
- public float tf(float freq) {
- return 1;
+ @Override public float tf(float freq) {
+ return 1.0f;
}
+
// idf used for phrase queries
- public float idf(Collection terms, Searcher searcher) {
- return 1;
+ @Override public IDFExplanation idfExplain(Collection terms, Searcher searcher) throws IOException {
+ return new IDFExplanation() {
+ @Override
+ public float getIdf() {
+ return 1.0f;
+ }
+ @Override
+ public String explain() {
+ return "Inexplicable";
+ }
+ };
}
}
}
Index: src/test/org/apache/lucene/search/TestSimilarity.java
===================================================================
--- src/test/org/apache/lucene/search/TestSimilarity.java (revision 828825)
+++ src/test/org/apache/lucene/search/TestSimilarity.java (working copy)
@@ -29,6 +29,7 @@
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
+import org.apache.lucene.search.Explanation.IDFExplanation;
/** Similarity unit test.
*
@@ -41,13 +42,24 @@
}
public static class SimpleSimilarity extends Similarity {
- public float lengthNorm(String field, int numTerms) { return 1.0f; }
- public float queryNorm(float sumOfSquaredWeights) { return 1.0f; }
- public float tf(float freq) { return freq; }
- public float sloppyFreq(int distance) { return 2.0f; }
- public float idf(Collection terms, Searcher searcher) { return 1.0f; }
- public float idf(int docFreq, int numDocs) { return 1.0f; }
- public float coord(int overlap, int maxOverlap) { return 1.0f; }
+ @Override public float lengthNorm(String field, int numTerms) { return 1.0f; }
+ @Override public float queryNorm(float sumOfSquaredWeights) { return 1.0f; }
+ @Override public float tf(float freq) { return freq; }
+ @Override public float sloppyFreq(int distance) { return 2.0f; }
+ @Override public float idf(int docFreq, int numDocs) { return 1.0f; }
+ @Override public float coord(int overlap, int maxOverlap) { return 1.0f; }
+ @Override public IDFExplanation idfExplain(Collection terms, Searcher searcher) throws IOException {
+ return new IDFExplanation() {
+ @Override
+ public float getIdf() {
+ return 1.0f;
+ }
+ @Override
+ public String explain() {
+ return "Inexplicable";
+ }
+ };
+ }
}
public void testSimilarity() throws Exception {
@@ -80,7 +92,7 @@
this.scorer = scorer;
}
public final void collect(int doc) throws IOException {
- assertTrue(scorer.score() == 1.0f);
+ assertEquals(1.0f, scorer.score());
}
public void setNextReader(IndexReader reader, int docBase) {}
public boolean acceptsDocsOutOfOrder() {
@@ -100,7 +112,7 @@
}
public final void collect(int doc) throws IOException {
//System.out.println("Doc=" + doc + " score=" + score);
- assertTrue(scorer.score() == (float)doc+base+1);
+ assertEquals((float)doc+base+1, scorer.score());
}
public void setNextReader(IndexReader reader, int docBase) {
base = docBase;
@@ -114,8 +126,7 @@
pq.add(a);
pq.add(c);
//System.out.println(pq.toString("field"));
- searcher.search
- (pq,
+ searcher.search(pq,
new Collector() {
private Scorer scorer;
public void setScorer(Scorer scorer) throws IOException {
@@ -123,7 +134,7 @@
}
public final void collect(int doc) throws IOException {
//System.out.println("Doc=" + doc + " score=" + score);
- assertTrue(scorer.score() == 1.0f);
+ assertEquals(1.0f, scorer.score());
}
public void setNextReader(IndexReader reader, int docBase) {}
public boolean acceptsDocsOutOfOrder() {
@@ -140,7 +151,7 @@
}
public final void collect(int doc) throws IOException {
//System.out.println("Doc=" + doc + " score=" + score);
- assertTrue(scorer.score() == 2.0f);
+ assertEquals(2.0f, scorer.score());
}
public void setNextReader(IndexReader reader, int docBase) {}
public boolean acceptsDocsOutOfOrder() {
Index: src/test/org/apache/lucene/search/TestTermVectors.java
===================================================================
--- src/test/org/apache/lucene/search/TestTermVectors.java (revision 828825)
+++ src/test/org/apache/lucene/search/TestTermVectors.java (working copy)
@@ -258,7 +258,7 @@
//System.out.println("Doc Id: " + docId + " freq " + freq);
TermFreqVector vector = knownSearcher.reader.getTermFreqVector(docId, "field");
float tf = sim.tf(freq);
- float idf = sim.idf(term, knownSearcher);
+ float idf = sim.idf(knownSearcher.docFreq(term), knownSearcher.maxDoc());
//float qNorm = sim.queryNorm()
//This is fine since we don't have stop words
float lNorm = sim.lengthNorm("field", vector.getTerms().length);