You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2011/06/01 09:55:56 UTC
svn commit: r1130039 - in /lucene/dev/trunk/lucene: ./
contrib/misc/src/test/org/apache/lucene/index/
contrib/misc/src/test/org/apache/lucene/misc/
src/java/org/apache/lucene/document/ src/java/org/apache/lucene/index/
Author: shaie
Date: Wed Jun 1 07:55:55 2011
New Revision: 1130039
URL: http://svn.apache.org/viewvc?rev=1130039&view=rev
Log:
LUCENE-3146: IndexReader.setNorms is no op if one of the field instances omits norms
Modified:
lucene/dev/trunk/lucene/CHANGES.txt
lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/index/TestFieldNormModifier.java
lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/misc/TestLengthNormModifier.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/document/Field.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexReader.java
lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentReader.java
Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1130039&r1=1130038&r2=1130039&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Wed Jun 1 07:55:55 2011
@@ -236,6 +236,9 @@ Changes in Runtime Behavior
(Mike McCandless, Michael Busch, Simon Willnauer)
+* LUCENE-3146: IndexReader.setNorm throws IllegalStateException if the field
+ does not store norms. (Shai Erera, Mike McCandless)
+
API Changes
* LUCENE-2302, LUCENE-1458, LUCENE-2111, LUCENE-2514: Terms are no longer
Modified: lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/index/TestFieldNormModifier.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/index/TestFieldNormModifier.java?rev=1130039&r1=1130038&r2=1130039&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/index/TestFieldNormModifier.java (original)
+++ lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/index/TestFieldNormModifier.java Wed Jun 1 07:55:55 2011
@@ -86,7 +86,11 @@ public class TestFieldNormModifier exten
public void testMissingField() throws Exception {
FieldNormModifier fnm = new FieldNormModifier(store, s);
- fnm.reSetNorms("nobodyherebutuschickens");
+ try {
+ fnm.reSetNorms("nobodyherebutuschickens");
+ } catch (IllegalStateException e) {
+ // expected
+ }
}
public void testFieldWithNoNorm() throws Exception {
@@ -101,7 +105,11 @@ public class TestFieldNormModifier exten
r.close();
FieldNormModifier fnm = new FieldNormModifier(store, s);
- fnm.reSetNorms("nonorm");
+ try {
+ fnm.reSetNorms("nonorm");
+ } catch (IllegalStateException e) {
+ // expected
+ }
// nothing should have changed
r = IndexReader.open(store, false);
Modified: lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/misc/TestLengthNormModifier.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/misc/TestLengthNormModifier.java?rev=1130039&r1=1130038&r2=1130039&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/misc/TestLengthNormModifier.java (original)
+++ lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/misc/TestLengthNormModifier.java Wed Jun 1 07:55:55 2011
@@ -92,12 +92,12 @@ public class TestLengthNormModifier exte
super.tearDown();
}
- public void testMissingField() {
+ public void testMissingField() throws Exception {
FieldNormModifier fnm = new FieldNormModifier(store, s);
try {
fnm.reSetNorms("nobodyherebutuschickens");
- } catch (Exception e) {
- assertNull("caught something", e);
+ } catch (IllegalStateException e) {
+ // expected
}
}
@@ -115,8 +115,8 @@ public class TestLengthNormModifier exte
FieldNormModifier fnm = new FieldNormModifier(store, s);
try {
fnm.reSetNorms("nonorm");
- } catch (Exception e) {
- assertNull("caught something", e);
+ } catch (IllegalStateException e) {
+ // expected
}
// nothing should have changed
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/document/Field.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/document/Field.java?rev=1130039&r1=1130038&r2=1130039&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/document/Field.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/document/Field.java Wed Jun 1 07:55:55 2011
@@ -96,7 +96,7 @@ public final class Field extends Abstrac
},
/** Expert: Index the field's value without an Analyzer,
- * and also disable the storing of norms. Note that you
+ * and also disable the indexing of norms. Note that you
* can also separately enable/disable norms by calling
* {@link Field#setOmitNorms}. No norms means that
* index-time field and document boosting and field
@@ -104,11 +104,11 @@ public final class Field extends Abstrac
* less memory usage as norms take up one byte of RAM
* per indexed field for every document in the index,
* during searching. Note that once you index a given
- * field <i>with</i> norms enabled, disabling norms will
+ * field <i>with</i> norms disabled, enabling norms will
* have no effect. In other words, for this to have the
- * above described effect on a field, all instances of
+ * above described effect on a field, one instance of
* that field must be indexed with NOT_ANALYZED_NO_NORMS
- * from the beginning. */
+ * at some point. */
NOT_ANALYZED_NO_NORMS {
@Override
public boolean isIndexed() { return true; }
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexReader.java?rev=1130039&r1=1130038&r2=1130039&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexReader.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexReader.java Wed Jun 1 07:55:55 2011
@@ -1025,8 +1025,8 @@ public abstract class IndexReader implem
* length normalization}. Thus, to preserve the length normalization
* values when resetting this, one should base the new value upon the old.
*
- * <b>NOTE:</b> If this field does not store norms, then
- * this method call will silently do nothing.
+ * <b>NOTE:</b> If this field does not index norms, then
+ * this method throws {@link IllegalStateException}.
*
* @see #norms(String)
* @see Similarity#decodeNormValue(byte)
@@ -1037,6 +1037,7 @@ public abstract class IndexReader implem
* has this index open (<code>write.lock</code> could not
* be obtained)
* @throws IOException if there is a low-level IO error
+ * @throws IllegalStateException if the field does not index norms
*/
public synchronized void setNorm(int doc, String field, byte value)
throws StaleReaderException, CorruptIndexException, LockObtainFailedException, IOException {
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentReader.java?rev=1130039&r1=1130038&r2=1130039&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentReader.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentReader.java Wed Jun 1 07:55:55 2011
@@ -566,8 +566,10 @@ public class SegmentReader extends Index
protected void doSetNorm(int doc, String field, byte value)
throws IOException {
SegmentNorms norm = norms.get(field);
- if (norm == null) // not an indexed field
- return;
+ if (norm == null) {
+ // field does not store norms
+ throw new IllegalStateException("Cannot setNorm for field " + field + ": norms were omitted");
+ }
normsDirty = true;
norm.copyOnWrite()[doc] = value; // set the value