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/01/08 23:46:22 UTC
svn commit: r1056829 - in /lucene/dev/branches/branch_3x: ./ lucene/
lucene/src/java/org/apache/lucene/index/
lucene/src/java/org/apache/lucene/search/
lucene/src/test/org/apache/lucene/index/ solr/
Author: rmuir
Date: Sat Jan 8 22:46:21 2011
New Revision: 1056829
URL: http://svn.apache.org/viewvc?rev=1056829&view=rev
Log:
LUCENE-1260: use the provided sim to encode norms
Modified:
lucene/dev/branches/branch_3x/ (props changed)
lucene/dev/branches/branch_3x/lucene/ (props changed)
lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/NormsWriter.java
lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/NormsWriterPerField.java
lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/Similarity.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/index/TestNorms.java
lucene/dev/branches/branch_3x/solr/ (props changed)
Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/NormsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/NormsWriter.java?rev=1056829&r1=1056828&r2=1056829&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/NormsWriter.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/NormsWriter.java Sat Jan 8 22:46:21 2011
@@ -37,7 +37,7 @@ import org.apache.lucene.search.Similari
final class NormsWriter extends InvertedDocEndConsumer {
- private static final byte defaultNorm = Similarity.getDefault().encodeNormValue(1.0f);
+ private final byte defaultNorm = Similarity.getDefault().encodeNormValue(1.0f);
private FieldInfos fieldInfos;
@Override
public InvertedDocEndConsumerPerThread addThread(DocInverterPerThread docInverterPerThread) {
Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/NormsWriterPerField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/NormsWriterPerField.java?rev=1056829&r1=1056828&r2=1056829&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/NormsWriterPerField.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/index/NormsWriterPerField.java Sat Jan 8 22:46:21 2011
@@ -73,7 +73,7 @@ final class NormsWriterPerField extends
norms = ArrayUtil.grow(norms, 1+upto);
}
final float norm = docState.similarity.computeNorm(fieldInfo.name, fieldState);
- norms[upto] = Similarity.getDefault().encodeNormValue(norm);
+ norms[upto] = docState.similarity.encodeNormValue(norm);
docIDs[upto] = docState.docID;
upto++;
}
Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/Similarity.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/Similarity.java?rev=1056829&r1=1056828&r2=1056829&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/Similarity.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/Similarity.java Sat Jan 8 22:46:21 2011
@@ -575,6 +575,11 @@ public abstract class Similarity impleme
}
/** Decodes a normalization factor stored in an index.
+ * <p>
+ * <b>WARNING: If you override this method, you should change the default
+ * Similarity to your implementation with {@link Similarity#setDefault(Similarity)}.
+ * Otherwise, your method may not always be called, especially if you omit norms
+ * for some fields.</b>
* @see #encodeNormValue(float)
*/
public float decodeNormValue(byte b) {
@@ -678,7 +683,11 @@ public abstract class Similarity impleme
* are rounded down to the largest representable value. Positive values too
* small to represent are rounded up to the smallest positive representable
* value.
- *
+ * <p>
+ * <b>WARNING: If you override this method, you should change the default
+ * Similarity to your implementation with {@link Similarity#setDefault(Similarity)}.
+ * Otherwise, your method may not always be called, especially if you omit norms
+ * for some fields.</b>
* @see org.apache.lucene.document.Field#setBoost(float)
* @see org.apache.lucene.util.SmallFloat
*/
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/index/TestNorms.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/index/TestNorms.java?rev=1056829&r1=1056828&r2=1056829&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/index/TestNorms.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/index/TestNorms.java Sat Jan 8 22:46:21 2011
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.Random;
import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.MockAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
@@ -230,4 +231,52 @@ public class TestNorms extends LuceneTes
return norm;
}
+ class CustomNormEncodingSimilarity extends DefaultSimilarity {
+ @Override
+ public byte encodeNormValue(float f) {
+ return (byte) f;
+ }
+
+ @Override
+ public float decodeNormValue(byte b) {
+ return (float) b;
+ }
+
+ @Override
+ public float computeNorm(String field, FieldInvertState state) {
+ return (float) state.getLength();
+ }
+ }
+
+ // LUCENE-1260
+ public void testCustomEncoder() throws Exception {
+ Directory dir = newDirectory();
+ IndexWriterConfig config = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer());
+ config.setSimilarity(new CustomNormEncodingSimilarity());
+ RandomIndexWriter writer = new RandomIndexWriter(random, dir, config);
+ Document doc = new Document();
+ Field foo = newField("foo", "", Field.Store.NO, Field.Index.ANALYZED);
+ Field bar = newField("bar", "", Field.Store.NO, Field.Index.ANALYZED);
+ doc.add(foo);
+ doc.add(bar);
+
+ for (int i = 0; i < 100; i++) {
+ bar.setValue("singleton");
+ writer.addDocument(doc);
+ }
+
+ IndexReader reader = writer.getReader();
+ writer.close();
+
+ byte fooNorms[] = reader.norms("foo");
+ for (int i = 0; i < reader.maxDoc(); i++)
+ assertEquals(0, fooNorms[i]);
+
+ byte barNorms[] = reader.norms("bar");
+ for (int i = 0; i < reader.maxDoc(); i++)
+ assertEquals(1, barNorms[i]);
+
+ reader.close();
+ dir.close();
+ }
}