Index: solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java =================================================================== --- solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java (revision 1068958) +++ solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java (working copy) @@ -299,7 +299,7 @@ state.setBoost(1.0f); state.setLength(4); assertQ(req("fl","*,score","q", "{!func}norm(a_t)", "fq","id:2"), - "//float[@name='score']='" + similarity.computeNorm("a_t",state) + "'"); // sqrt(4)==2 and is exactly representable when quantized to a byte + "//float[@name='score']='" + similarity.computeNorm(state) + "'"); // sqrt(4)==2 and is exactly representable when quantized to a byte // test that ord and rord are working on a global index basis, not just // at the segment level (since Lucene 2.9 has switched to per-segment searching) Index: lucene/src/test/org/apache/lucene/search/payloads/TestPayloadNearQuery.java =================================================================== --- lucene/src/test/org/apache/lucene/search/payloads/TestPayloadNearQuery.java (revision 1068958) +++ lucene/src/test/org/apache/lucene/search/payloads/TestPayloadNearQuery.java (working copy) @@ -299,14 +299,14 @@ // must be static for weight serialization tests static class BoostingSimilarity extends DefaultSimilarity { - @Override public float scorePayload(int docId, String fieldName, int start, int end, byte[] payload, int offset, int length) { + @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 return payload[offset]; } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //Make everything else 1 so we see the effect of the payload //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - @Override public float computeNorm(String fieldName, FieldInvertState state) { + @Override public float computeNorm(FieldInvertState state) { return state.getBoost(); } Index: lucene/src/test/org/apache/lucene/search/payloads/TestPayloadTermQuery.java =================================================================== --- lucene/src/test/org/apache/lucene/search/payloads/TestPayloadTermQuery.java (revision 1068958) +++ lucene/src/test/org/apache/lucene/search/payloads/TestPayloadTermQuery.java (working copy) @@ -287,7 +287,7 @@ // TODO: Remove warning after API has been finalized @Override - public float scorePayload(int docId, String fieldName, int start, int end, byte[] payload, int offset, int length) { + 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 return payload[offset]; } @@ -296,7 +296,7 @@ //Make everything else 1 so we see the effect of the payload //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @Override - public float computeNorm(String fieldName, FieldInvertState state) { + public float computeNorm(FieldInvertState state) { return state.getBoost(); } Index: lucene/src/test/org/apache/lucene/search/JustCompileSearch.java =================================================================== --- lucene/src/test/org/apache/lucene/search/JustCompileSearch.java (revision 1068958) +++ lucene/src/test/org/apache/lucene/search/JustCompileSearch.java (working copy) @@ -248,7 +248,7 @@ } @Override - public float computeNorm(String fieldName, FieldInvertState state) { + public float computeNorm(FieldInvertState state) { throw new UnsupportedOperationException(UNSUPPORTED_MSG); } Index: lucene/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java =================================================================== --- lucene/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java (revision 1068958) +++ lucene/src/test/org/apache/lucene/search/TestDisjunctionMaxQuery.java (working copy) @@ -62,7 +62,7 @@ } @Override - public float computeNorm(String fieldName, FieldInvertState state) { + public float computeNorm(FieldInvertState state) { // Disable length norm return state.getBoost(); } Index: lucene/src/test/org/apache/lucene/search/TestSimilarity.java =================================================================== --- lucene/src/test/org/apache/lucene/search/TestSimilarity.java (revision 1068958) +++ lucene/src/test/org/apache/lucene/search/TestSimilarity.java (working copy) @@ -40,7 +40,7 @@ public class TestSimilarity extends LuceneTestCase { public static class SimpleSimilarity extends Similarity implements SimilarityProvider { - @Override public float computeNorm(String field, FieldInvertState state) { return state.getBoost(); } + @Override public float computeNorm(FieldInvertState state) { return state.getBoost(); } @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; } Index: lucene/src/test/org/apache/lucene/search/TestSimilarityProvider.java =================================================================== --- lucene/src/test/org/apache/lucene/search/TestSimilarityProvider.java (revision 1068958) +++ lucene/src/test/org/apache/lucene/search/TestSimilarityProvider.java (working copy) @@ -107,7 +107,7 @@ private class Sim1 extends Similarity { @Override - public float computeNorm(String field, FieldInvertState state) { + public float computeNorm(FieldInvertState state) { return 1f; } @@ -129,7 +129,7 @@ private class Sim2 extends Similarity { @Override - public float computeNorm(String field, FieldInvertState state) { + public float computeNorm(FieldInvertState state) { return 10f; } Index: lucene/src/test/org/apache/lucene/index/TestIndexReaderCloneNorms.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestIndexReaderCloneNorms.java (revision 1068958) +++ lucene/src/test/org/apache/lucene/index/TestIndexReaderCloneNorms.java (working copy) @@ -43,7 +43,7 @@ private class SimilarityOne extends DefaultSimilarity { @Override - public float computeNorm(String fieldName, FieldInvertState state) { + public float computeNorm(FieldInvertState state) { // diable length norm return state.getBoost(); } Index: lucene/src/test/org/apache/lucene/index/TestMaxTermFrequency.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestMaxTermFrequency.java (revision 1068958) +++ lucene/src/test/org/apache/lucene/index/TestMaxTermFrequency.java (working copy) @@ -109,7 +109,7 @@ } @Override - public float computeNorm(String field, FieldInvertState state) { + public float computeNorm(FieldInvertState state) { return (float) state.getMaxTermFrequency(); } } Index: lucene/src/test/org/apache/lucene/index/TestOmitTf.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestOmitTf.java (revision 1068958) +++ lucene/src/test/org/apache/lucene/index/TestOmitTf.java (working copy) @@ -36,7 +36,7 @@ public class TestOmitTf extends LuceneTestCase { public static class SimpleSimilarity extends Similarity implements SimilarityProvider { - @Override public float computeNorm(String field, FieldInvertState state) { return state.getBoost(); } + @Override public float computeNorm(FieldInvertState state) { return state.getBoost(); } @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; } Index: lucene/src/test/org/apache/lucene/index/TestNorms.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestNorms.java (revision 1068958) +++ lucene/src/test/org/apache/lucene/index/TestNorms.java (working copy) @@ -42,7 +42,7 @@ private class SimilarityOne extends DefaultSimilarity { @Override - public float computeNorm(String fieldName, FieldInvertState state) { + public float computeNorm(FieldInvertState state) { // Disable length norm return state.getBoost(); } @@ -252,7 +252,7 @@ } @Override - public float computeNorm(String field, FieldInvertState state) { + public float computeNorm(FieldInvertState state) { return (float) state.getLength(); } } Index: lucene/src/java/org/apache/lucene/search/Similarity.java =================================================================== --- lucene/src/java/org/apache/lucene/search/Similarity.java (revision 1068958) +++ lucene/src/java/org/apache/lucene/search/Similarity.java (working copy) @@ -561,49 +561,13 @@ * Thus they have limited precision, and documents * must be re-indexed if this method is altered. * - *
For backward compatibility this method by default calls - * {@link #lengthNorm(String, int)} passing - * {@link FieldInvertState#getLength()} as the second argument, and - * then multiplies this value by {@link FieldInvertState#getBoost()}.
- * * @lucene.experimental * - * @param field field name * @param state current processing state for this field * @return the calculated float norm */ - public abstract float computeNorm(String field, FieldInvertState state); + public abstract float computeNorm(FieldInvertState state); - /** Computes the normalization value for a field given the total number of - * terms contained in a field. These values, together with field boosts, are - * stored in an index and multipled into scores for hits on each field by the - * search code. - * - *Matches in longer fields are less precise, so implementations of this
- * method usually return smaller values when numTokens is large,
- * and larger values when numTokens is small.
- *
- *
Note that the return values are computed under - * {@link org.apache.lucene.index.IndexWriter#addDocument(org.apache.lucene.document.Document)} - * and then stored using - * {@link #encodeNormValue(float)}. - * Thus they have limited precision, and documents - * must be re-indexed if this method is altered. - * - * @param fieldName the name of the field - * @param numTokens the total number of tokens contained in fields named - * fieldName of doc. - * @return a normalization factor for hits on this field of this document - * - * @see org.apache.lucene.document.Field#setBoost(float) - * - * @deprecated Please override computeNorm instead - */ - @Deprecated - public final float lengthNorm(String fieldName, int numTokens) { - throw new UnsupportedOperationException("please use computeNorm instead"); - } - /** Encodes a normalization factor for storage in an index. * *
The encoding uses a three-bit mantissa, a five-bit exponent, and
@@ -781,7 +745,6 @@
* 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
* @param end The end position of the payload
* @param payload The payload byte array to be scored
@@ -791,7 +754,7 @@
*
*/
// TODO: maybe switch this API to BytesRef?
- public float scorePayload(int docId, String fieldName, int start, int end, byte [] payload, int offset, int length)
+ public float scorePayload(int docId, int start, int end, byte [] payload, int offset, int length)
{
return 1;
}
Index: lucene/src/java/org/apache/lucene/search/payloads/PayloadNearQuery.java
===================================================================
--- lucene/src/java/org/apache/lucene/search/payloads/PayloadNearQuery.java (revision 1068958)
+++ lucene/src/java/org/apache/lucene/search/payloads/PayloadNearQuery.java (working copy)
@@ -192,7 +192,7 @@
protected void processPayloads(Collection
* In order to take advantage of this, you must override
- * {@link org.apache.lucene.search.Similarity#scorePayload(int, String, int, int, byte[],int,int)}
+ * {@link org.apache.lucene.search.Similarity#scorePayload(int, int, int, byte[],int,int)}
* which returns 1 by default.
*
* Payload scores are aggregated using a pluggable {@link PayloadFunction}.
@@ -119,14 +119,14 @@
if (payload != null) {
payloadScore = function.currentScore(doc, term.field(),
spans.start(), spans.end(), payloadsSeen, payloadScore,
- similarity.scorePayload(doc, term.field(), spans.start(),
+ similarity.scorePayload(doc, spans.start(),
spans.end(), payload.bytes,
payload.offset,
payload.length));
} else {
payloadScore = function.currentScore(doc, term.field(),
spans.start(), spans.end(), payloadsSeen, payloadScore,
- similarity.scorePayload(doc, term.field(), spans.start(),
+ similarity.scorePayload(doc, spans.start(),
spans.end(), null,
0,
0));
Index: lucene/src/java/org/apache/lucene/search/DefaultSimilarity.java
===================================================================
--- lucene/src/java/org/apache/lucene/search/DefaultSimilarity.java (revision 1068958)
+++ lucene/src/java/org/apache/lucene/search/DefaultSimilarity.java (working copy)
@@ -31,7 +31,7 @@
*
* @lucene.experimental */
@Override
- public float computeNorm(String field, FieldInvertState state) {
+ public float computeNorm(FieldInvertState state) {
final int numTerms;
if (discountOverlaps)
numTerms = state.getLength() - state.getNumOverlap();
Index: lucene/src/java/org/apache/lucene/index/NormsWriterPerField.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/NormsWriterPerField.java (revision 1068958)
+++ lucene/src/java/org/apache/lucene/index/NormsWriterPerField.java (working copy)
@@ -74,7 +74,7 @@
assert norms.length == upto;
norms = ArrayUtil.grow(norms, 1+upto);
}
- final float norm = similarity.computeNorm(fieldInfo.name, fieldState);
+ final float norm = similarity.computeNorm(fieldState);
norms[upto] = similarity.encodeNormValue(norm);
docIDs[upto] = docState.docID;
upto++;
Index: lucene/src/java/org/apache/lucene/index/IndexReader.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/IndexReader.java (revision 1068958)
+++ lucene/src/java/org/apache/lucene/index/IndexReader.java (working copy)
@@ -1004,8 +1004,8 @@
/** Expert: Resets the normalization factor for the named field of the named
* document. The norm represents the product of the field's {@link
- * org.apache.lucene.document.Fieldable#setBoost(float) boost} and its {@link Similarity#lengthNorm(String,
- * int) length normalization}. Thus, to preserve the length normalization
+ * org.apache.lucene.document.Fieldable#setBoost(float) boost} and its
+ * length normalization}. Thus, to preserve the length normalization
* values when resetting this, one should base the new value upon the old.
*
* NOTE: If this field does not store norms, then
Index: lucene/src/java/org/apache/lucene/document/AbstractField.java
===================================================================
--- lucene/src/java/org/apache/lucene/document/AbstractField.java (revision 1068958)
+++ lucene/src/java/org/apache/lucene/document/AbstractField.java (working copy)
@@ -76,17 +76,14 @@
* name, all such values are multiplied together. This product is then
* used to compute the norm factor for the field. By
* default, in the {@link
- * org.apache.lucene.search.Similarity#computeNorm(String,
- * FieldInvertState)} method, the boost value is multiplied
- * by the {@link
- * org.apache.lucene.search.Similarity#lengthNorm(String,
- * int)} and then
+ * org.apache.lucene.search.Similarity#computeNorm(FieldInvertState)} method, the boost value is multiplied
+ * by the length normalization factor and then
* rounded by {@link org.apache.lucene.search.Similarity#encodeNormValue(float)} before it is stored in the
* index. One should attempt to ensure that this product does not overflow
* the range of that encoding.
*
* @see org.apache.lucene.document.Document#setBoost(float)
- * @see org.apache.lucene.search.Similarity#computeNorm(String, FieldInvertState)
+ * @see org.apache.lucene.search.Similarity#computeNorm(FieldInvertState)
* @see org.apache.lucene.search.Similarity#encodeNormValue(float)
*/
public void setBoost(float boost) {
Index: lucene/src/java/org/apache/lucene/document/Fieldable.java
===================================================================
--- lucene/src/java/org/apache/lucene/document/Fieldable.java (revision 1068958)
+++ lucene/src/java/org/apache/lucene/document/Fieldable.java (working copy)
@@ -43,16 +43,14 @@
* name, all such values are multiplied together. This product is then
* used to compute the norm factor for the field. By
* default, in the {@link
- * org.apache.lucene.search.Similarity#computeNorm(String,
- * FieldInvertState)} method, the boost value is multiplied
- * by the {@link
- * org.apache.lucene.search.Similarity#lengthNorm(String,
- * int)} and then rounded by {@link org.apache.lucene.search.Similarity#encodeNormValue(float)} before it is stored in the
+ * org.apache.lucene.search.Similarity#computeNorm(FieldInvertState)} method, the boost value is multiplied
+ * by the length normalization factor
+ * and then rounded by {@link org.apache.lucene.search.Similarity#encodeNormValue(float)} before it is stored in the
* index. One should attempt to ensure that this product does not overflow
* the range of that encoding.
*
* @see org.apache.lucene.document.Document#setBoost(float)
- * @see org.apache.lucene.search.Similarity#computeNorm(String, FieldInvertState)
+ * @see org.apache.lucene.search.Similarity#computeNorm(FieldInvertState)
* @see org.apache.lucene.search.Similarity#encodeNormValue(float)
*/
void setBoost(float boost);
Index: lucene/contrib/instantiated/src/java/org/apache/lucene/store/instantiated/InstantiatedIndexWriter.java
===================================================================
--- lucene/contrib/instantiated/src/java/org/apache/lucene/store/instantiated/InstantiatedIndexWriter.java (revision 1068958)
+++ lucene/contrib/instantiated/src/java/org/apache/lucene/store/instantiated/InstantiatedIndexWriter.java (working copy)
@@ -241,7 +241,7 @@
final FieldInvertState invertState = new FieldInvertState();
invertState.setBoost(eFieldTermDocInfoFactoriesByTermText.getKey().boost * document.getDocument().getBoost());
invertState.setLength(eFieldTermDocInfoFactoriesByTermText.getKey().fieldLength);
- final float norm = similarityProvider.get(fieldName).computeNorm(fieldName, invertState);
+ final float norm = similarityProvider.get(fieldName).computeNorm(invertState);
normsByFieldNameAndDocumentNumber.get(fieldName)[document.getDocumentNumber()] = similarityProvider.get(fieldName).encodeNormValue(norm);
} else {
System.currentTimeMillis();
Index: lucene/contrib/misc/src/test/org/apache/lucene/index/TestFieldNormModifier.java
===================================================================
--- lucene/contrib/misc/src/test/org/apache/lucene/index/TestFieldNormModifier.java (revision 1068958)
+++ lucene/contrib/misc/src/test/org/apache/lucene/index/TestFieldNormModifier.java (working copy)
@@ -44,7 +44,7 @@
/** inverts the normal notion of lengthNorm */
public static SimilarityProvider s = new DefaultSimilarity() {
@Override
- public float computeNorm(String fieldName, FieldInvertState state) {
+ 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 1068958)
+++ lucene/contrib/misc/src/test/org/apache/lucene/misc/SweetSpotSimilarityTest.java (working copy)
@@ -20,6 +20,7 @@
import org.apache.lucene.search.DefaultSimilarity;
import org.apache.lucene.search.Similarity;
+import org.apache.lucene.search.SimilarityProvider;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.index.FieldInvertState;
@@ -30,8 +31,8 @@
public void testSweetSpotComputeNorm() {
- SweetSpotSimilarity ss = new SweetSpotSimilarity();
- ss.setLengthNormFactors(1,1,0.5f);
+ final SweetSpotSimilarity ss = new SweetSpotSimilarity();
+ ss.setLengthNormFactors(1,1,0.5f,true);
Similarity d = new DefaultSimilarity();
Similarity s = ss;
@@ -43,28 +44,28 @@
for (int i = 1; i < 1000; i++) {
invertState.setLength(i);
assertEquals("base case: i="+i,
- d.computeNorm("foo", invertState),
- s.computeNorm("foo", invertState),
+ d.computeNorm(invertState),
+ s.computeNorm(invertState),
0.0f);
}
// make a sweet spot
- ss.setLengthNormFactors(3,10,0.5f);
+ ss.setLengthNormFactors(3,10,0.5f,true);
for (int i = 3; i <=10; i++) {
invertState.setLength(i);
assertEquals("3,10: spot i="+i,
1.0f,
- s.computeNorm("foo", invertState),
+ s.computeNorm(invertState),
0.0f);
}
for (int i = 10; i < 1000; i++) {
invertState.setLength(i-9);
- final float normD = d.computeNorm("foo", invertState);
+ final float normD = d.computeNorm(invertState);
invertState.setLength(i);
- final float normS = s.computeNorm("foo", invertState);
+ final float normS = s.computeNorm(invertState);
assertEquals("3,10: 10numOverlapTokens will be
- * subtracted from numTokens; if false then
- * numOverlapTokens will be assumed to be 0 (see
- * {@link DefaultSimilarity#computeNorm(String, FieldInvertState)} for details).
- *
- * @see #lengthNorm
- */
- public void setLengthNormFactors(String field, int min, int max,
- float steepness, boolean discountOverlaps) {
- ln_mins.put(field, Integer.valueOf(min));
- ln_maxs.put(field, Integer.valueOf(max));
- ln_steeps.put(field, Float.valueOf(steepness));
- ln_overlaps.put(field, new Boolean(discountOverlaps));
- }
/**
* Implemented as state.getBoost() *
- * lengthNorm(fieldName, numTokens) where
+ * computeLengthNorm(numTokens) where
* numTokens does not count overlap tokens if
* discountOverlaps is true by default or true for this
* specific field. */
@Override
- public float computeNorm(String fieldName, FieldInvertState state) {
+ public float computeNorm(FieldInvertState state) {
final int numTokens;
- boolean overlaps = discountOverlaps;
- if (ln_overlaps.containsKey(fieldName)) {
- overlaps = ln_overlaps.get(fieldName).booleanValue();
- }
- if (overlaps)
+
+ if (discountOverlaps)
numTokens = state.getLength() - state.getNumOverlap();
else
numTokens = state.getLength();
- return state.getBoost() * computeLengthNorm(fieldName, numTokens);
+ return state.getBoost() * computeLengthNorm(numTokens);
}
/**
@@ -167,21 +135,11 @@
*
* @see #setLengthNormFactors
*/
- public float computeLengthNorm(String fieldName, int numTerms) {
- int l = ln_min;
- int h = ln_max;
- float s = ln_steep;
+ public float computeLengthNorm(int numTerms) {
+ final int l = ln_min;
+ final int h = ln_max;
+ final float s = ln_steep;
- if (ln_mins.containsKey(fieldName)) {
- l = ln_mins.get(fieldName).intValue();
- }
- if (ln_maxs.containsKey(fieldName)) {
- h = ln_maxs.get(fieldName).intValue();
- }
- if (ln_steeps.containsKey(fieldName)) {
- s = ln_steeps.get(fieldName).floatValue();
- }
-
return (float)
(1.0f /
Math.sqrt
Index: lucene/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java
===================================================================
--- lucene/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java (revision 1068958)
+++ lucene/contrib/memory/src/java/org/apache/lucene/index/memory/MemoryIndex.java (working copy)
@@ -1190,7 +1190,7 @@
int numOverlapTokens = info != null ? info.numOverlapTokens : 0;
float boost = info != null ? info.getBoost() : 1.0f;
FieldInvertState invertState = new FieldInvertState(0, numTokens, numOverlapTokens, 0, boost);
- float n = fieldSim.computeNorm(fieldName, invertState);
+ float n = fieldSim.computeNorm(invertState);
byte norm = fieldSim.encodeNormValue(n);
norms = new byte[] {norm};