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 2012/02/18 16:48:58 UTC
svn commit: r1245948 - in /lucene/dev/branches/branch_3x: ./ lucene/
lucene/core/src/java/org/apache/lucene/index/
lucene/core/src/test/org/apache/lucene/document/ solr/ solr/core/
solr/core/src/java/org/apache/solr/update/ solr/core/src/test/org/apach...
Author: rmuir
Date: Sat Feb 18 15:48:57 2012
New Revision: 1245948
URL: http://svn.apache.org/viewvc?rev=1245948&view=rev
Log:
LUCENE-3785: throw an exception if you set an index-time boost on a field that omits norms
Modified:
lucene/dev/branches/branch_3x/ (props changed)
lucene/dev/branches/branch_3x/lucene/ (props changed)
lucene/dev/branches/branch_3x/lucene/CHANGES.txt
lucene/dev/branches/branch_3x/lucene/core/src/java/org/apache/lucene/index/DocInverterPerField.java
lucene/dev/branches/branch_3x/lucene/core/src/test/org/apache/lucene/document/TestDocument.java
lucene/dev/branches/branch_3x/solr/ (props changed)
lucene/dev/branches/branch_3x/solr/core/ (props changed)
lucene/dev/branches/branch_3x/solr/core/src/java/org/apache/solr/update/DocumentBuilder.java
lucene/dev/branches/branch_3x/solr/core/src/test/org/apache/solr/handler/XsltUpdateRequestHandlerTest.java
Modified: lucene/dev/branches/branch_3x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/CHANGES.txt?rev=1245948&r1=1245947&r2=1245948&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_3x/lucene/CHANGES.txt Sat Feb 18 15:48:57 2012
@@ -70,6 +70,13 @@ Changes in backwards compatibility polic
IndexReader.lastModified and getCurrentVersion (Andrzej Bialecki,
Robert Muir, Mike McCandless)
+Changes in Runtime Behavior
+
+* LUCENE-3796: Throw an exception if you try to set an index-time
+ boost on a field that omits norms. Because the index-time boost
+ is multiplied into the norm, previously your boost would be
+ silently discarded. (Robert Muir)
+
Security fixes
* LUCENE-3588: Try harder to prevent SIGSEGV on cloned MMapIndexInputs:
Modified: lucene/dev/branches/branch_3x/lucene/core/src/java/org/apache/lucene/index/DocInverterPerField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/core/src/java/org/apache/lucene/index/DocInverterPerField.java?rev=1245948&r1=1245947&r2=1245948&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/core/src/java/org/apache/lucene/index/DocInverterPerField.java (original)
+++ lucene/dev/branches/branch_3x/lucene/core/src/java/org/apache/lucene/index/DocInverterPerField.java Sat Feb 18 15:48:57 2012
@@ -79,6 +79,12 @@ final class DocInverterPerField extends
// tokenized.
if (field.isIndexed() && doInvert) {
+ final float boost = field.getBoost();
+ // if the field omits norms, the boost cannot be indexed.
+ if (field.getOmitNorms() && boost != 1.0f) {
+ throw new UnsupportedOperationException("You cannot set an index-time boost: norms are omitted for field '" + field.name() + "'");
+ }
+
if (i > 0)
fieldState.position += docState.analyzer == null ? 0 : docState.analyzer.getPositionIncrementGap(fieldInfo.name);
@@ -194,7 +200,7 @@ final class DocInverterPerField extends
}
fieldState.offset += docState.analyzer == null ? 0 : docState.analyzer.getOffsetGap(field);
- fieldState.boost *= field.getBoost();
+ fieldState.boost *= boost;
}
// LUCENE-2387: don't hang onto the field, so GC can
Modified: lucene/dev/branches/branch_3x/lucene/core/src/test/org/apache/lucene/document/TestDocument.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/core/src/test/org/apache/lucene/document/TestDocument.java?rev=1245948&r1=1245947&r2=1245948&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/core/src/test/org/apache/lucene/document/TestDocument.java (original)
+++ lucene/dev/branches/branch_3x/lucene/core/src/test/org/apache/lucene/document/TestDocument.java Sat Feb 18 15:48:57 2012
@@ -1,6 +1,9 @@
package org.apache.lucene.document;
+import org.apache.lucene.analysis.MockAnalyzer;
import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.RandomIndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
@@ -279,4 +282,33 @@ public class TestDocument extends Lucene
// expected
}
}
+
+ public void testBoost() throws Exception {
+ Directory dir = newDirectory();
+ IndexWriterConfig iwc = new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random));
+ iwc.setMergePolicy(newLogMergePolicy());
+ IndexWriter iw = new IndexWriter(dir, iwc);
+ Document doc = new Document();
+ doc.add(new Field("field1", "sometext", Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));
+ doc.add(new Field("field2", "sometext", Field.Store.NO, Field.Index.ANALYZED));
+ doc.add(new Field("foo", "bar", Field.Store.NO, Field.Index.NOT_ANALYZED_NO_NORMS));
+ iw.addDocument(doc); // add an 'ok' document
+ try {
+ doc = new Document();
+ // try to boost with norms omitted
+ Field field = new Field("foo", "baz", Field.Store.NO, Field.Index.NOT_ANALYZED_NO_NORMS);
+ field.setBoost(5.0f);
+ doc.add(field);
+ iw.addDocument(doc);
+ fail("didn't get any exception, boost silently discarded");
+ } catch (UnsupportedOperationException expected) {
+ // expected
+ }
+ IndexReader ir = IndexReader.open(iw, false);
+ assertEquals(1, ir.numDocs());
+ assertEquals("sometext", ir.document(0).get("field1"));
+ ir.close();
+ iw.close();
+ dir.close();
+ }
}
Modified: lucene/dev/branches/branch_3x/solr/core/src/java/org/apache/solr/update/DocumentBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/solr/core/src/java/org/apache/solr/update/DocumentBuilder.java?rev=1245948&r1=1245947&r2=1245948&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/solr/core/src/java/org/apache/solr/update/DocumentBuilder.java (original)
+++ lucene/dev/branches/branch_3x/solr/core/src/java/org/apache/solr/update/DocumentBuilder.java Sat Feb 18 15:48:57 2012
@@ -248,6 +248,11 @@ public class DocumentBuilder {
sfield.getName() + ": " +field.getValue() );
}
+ if (sfield != null && sfield.omitNorms() && boost != 1.0F) {
+ throw new SolrException( SolrException.ErrorCode.BAD_REQUEST,
+ "ERROR: "+getID(doc, schema)+"cannot set an index-time boost, norms are omitted for field " +
+ sfield.getName() + ": " +field.getValue() );
+ }
// load each field value
boolean hasField = false;
Modified: lucene/dev/branches/branch_3x/solr/core/src/test/org/apache/solr/handler/XsltUpdateRequestHandlerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/solr/core/src/test/org/apache/solr/handler/XsltUpdateRequestHandlerTest.java?rev=1245948&r1=1245947&r2=1245948&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/solr/core/src/test/org/apache/solr/handler/XsltUpdateRequestHandlerTest.java (original)
+++ lucene/dev/branches/branch_3x/solr/core/src/test/org/apache/solr/handler/XsltUpdateRequestHandlerTest.java Sat Feb 18 15:48:57 2012
@@ -57,7 +57,7 @@ public class XsltUpdateRequestHandlerTes
String xml =
"<random>" +
" <document>" +
- " <node name=\"id\" enhance=\"2.2\" value=\"12345\"/>" +
+ " <node name=\"id\" value=\"12345\"/>" +
" <node name=\"name\" value=\"kitten\"/>" +
" <node name=\"text\" enhance=\"3\" value=\"some other day\"/>" +
" <node name=\"title\" enhance=\"4\" value=\"A story\"/>" +