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/08/03 22:40:19 UTC
svn commit: r1369199 - in /lucene/dev/branches/branch_4x: ./ lucene/
lucene/core/ lucene/core/src/java/org/apache/lucene/document/
lucene/core/src/test/org/apache/lucene/document/
lucene/core/src/test/org/apache/lucene/index/ lucene/core/src/test/org/a...
Author: rmuir
Date: Fri Aug 3 20:40:18 2012
New Revision: 1369199
URL: http://svn.apache.org/viewvc?rev=1369199&view=rev
Log:
LUCENE-3616: throw exception on some illegal field configurations (applying boost to omitNorms or unindexed field), fix TextField(Reader) ctor as it cannot Store
Added:
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/document/TestField.java
- copied unchanged from r1369196, lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/document/TestField.java
Modified:
lucene/dev/branches/branch_4x/ (props changed)
lucene/dev/branches/branch_4x/lucene/ (props changed)
lucene/dev/branches/branch_4x/lucene/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_4x/lucene/core/ (props changed)
lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/document/Field.java
lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/document/StoredField.java
lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/document/TextField.java
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/document/TestDocument.java
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestDoc.java
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestPositionIncrement.java
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestSort.java
lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/spans/TestPayloadSpans.java
lucene/dev/branches/branch_4x/lucene/demo/ (props changed)
lucene/dev/branches/branch_4x/lucene/demo/src/java/org/apache/lucene/demo/IndexFiles.java
lucene/dev/branches/branch_4x/solr/ (props changed)
lucene/dev/branches/branch_4x/solr/core/ (props changed)
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/CurrencyField.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/LatLonType.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/PointType.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/update/DocumentBuilder.java
Modified: lucene/dev/branches/branch_4x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/CHANGES.txt?rev=1369199&r1=1369198&r2=1369199&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/lucene/CHANGES.txt Fri Aug 3 20:40:18 2012
@@ -94,6 +94,10 @@ API Changes
instead of the previous boolean needsFlags; consistent with the changes
for DocsAndPositionsEnum in LUCENE-4230. Currently othe only flag
is DocsEnum.FLAG_FREQS. (Robert Muir, Mike McCandless)
+
+* LUCENE-3616: TextField(String, Reader, Store) was reduced to TextField(String, Reader),
+ as the Store parameter didn't make sense: if you supplied Store.YES, you would only
+ receive an exception anyway. (Robert Muir)
Optimizations
@@ -163,6 +167,9 @@ Changes in Runtime Behavior
* LUCENE-4109: Enable position increments in the flexible queryparser by default.
(Karsten Rauch via Robert Muir)
+
+* LUCENE-3616: Field throws exception if you try to set a boost on an
+ unindexed field or one that omits norms. (Robert Muir)
Build
Modified: lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/document/Field.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/document/Field.java?rev=1369199&r1=1369198&r2=1369199&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/document/Field.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/document/Field.java Fri Aug 3 20:40:18 2012
@@ -377,6 +377,11 @@ public class Field implements IndexableF
* @see org.apache.lucene.search.similarities.DefaultSimilarity#encodeNormValue(float)
*/
public void setBoost(float boost) {
+ if (boost != 1.0f) {
+ if (type.indexed() == false || type.omitNorms()) {
+ throw new IllegalArgumentException("You cannot set an index-time boost on an unindexed field, or one that omits norms");
+ }
+ }
this.boost = boost;
}
Modified: lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/document/StoredField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/document/StoredField.java?rev=1369199&r1=1369198&r2=1369199&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/document/StoredField.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/document/StoredField.java Fri Aug 3 20:40:18 2012
@@ -49,6 +49,7 @@ public final class StoredField extends F
super(name, value, TYPE);
}
+ // TODO: not great but maybe not a big problem?
public StoredField(String name, int value) {
super(name, TYPE);
fieldsData = value;
Modified: lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/document/TextField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/document/TextField.java?rev=1369199&r1=1369198&r2=1369199&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/document/TextField.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/document/TextField.java Fri Aug 3 20:40:18 2012
@@ -46,9 +46,9 @@ public final class TextField extends Fie
// TODO: add sugar for term vectors...?
- /** Creates a new TextField with Reader value. */
- public TextField(String name, Reader reader, Store store) {
- super(name, reader, store == Store.YES ? TYPE_STORED : TYPE_NOT_STORED);
+ /** Creates a new un-stored TextField with Reader value. */
+ public TextField(String name, Reader reader) {
+ super(name, reader, TYPE_NOT_STORED);
}
/** Creates a new TextField with String value. */
Modified: lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/document/TestDocument.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/document/TestDocument.java?rev=1369199&r1=1369198&r2=1369199&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/document/TestDocument.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/document/TestDocument.java Fri Aug 3 20:40:18 2012
@@ -359,33 +359,4 @@ public class TestDocument extends Lucene
r.close();
dir.close();
}
-
- 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 StringField("field1", "sometext", Field.Store.YES));
- doc.add(new TextField("field2", "sometext", Field.Store.NO));
- doc.add(new StringField("foo", "bar", Field.Store.NO));
- iw.addDocument(doc); // add an 'ok' document
- try {
- doc = new Document();
- // try to boost with norms omitted
- StringField field = new StringField("foo", "baz", Field.Store.NO);
- field.setBoost(5.0f);
- doc.add(field);
- iw.addDocument(doc);
- fail("didn't get any exception, boost silently discarded");
- } catch (UnsupportedOperationException expected) {
- // expected
- }
- DirectoryReader ir = DirectoryReader.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_4x/lucene/core/src/test/org/apache/lucene/index/TestDoc.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestDoc.java?rev=1369199&r1=1369198&r2=1369199&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestDoc.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestDoc.java Fri Aug 3 20:40:18 2012
@@ -186,7 +186,7 @@ public class TestDoc extends LuceneTestC
File file = new File(workDir, fileName);
Document doc = new Document();
InputStreamReader is = new InputStreamReader(new FileInputStream(file), "UTF-8");
- doc.add(new TextField("contents", is, Field.Store.NO));
+ doc.add(new TextField("contents", is));
writer.addDocument(doc);
writer.commit();
is.close();
Modified: lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java?rev=1369199&r1=1369198&r2=1369199&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java Fri Aug 3 20:40:18 2012
@@ -1542,4 +1542,73 @@ public class TestIndexWriterExceptions e
iw.close();
dir.close();
}
+
+ public void testBoostOmitNorms() 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 StringField("field1", "sometext", Field.Store.YES));
+ doc.add(new TextField("field2", "sometext", Field.Store.NO));
+ doc.add(new StringField("foo", "bar", Field.Store.NO));
+ iw.addDocument(doc); // add an 'ok' document
+ try {
+ doc = new Document();
+ // try to boost with norms omitted
+ List<IndexableField> list = new ArrayList<IndexableField>();
+ list.add(new IndexableField() {
+
+ @Override
+ public String name() {
+ return "foo";
+ }
+
+ @Override
+ public IndexableFieldType fieldType() {
+ return StringField.TYPE_NOT_STORED;
+ }
+
+ @Override
+ public float boost() {
+ return 5f;
+ }
+
+ @Override
+ public BytesRef binaryValue() {
+ return null;
+ }
+
+ @Override
+ public String stringValue() {
+ return "baz";
+ }
+
+ @Override
+ public Reader readerValue() {
+ return null;
+ }
+
+ @Override
+ public Number numericValue() {
+ return null;
+ }
+
+ @Override
+ public TokenStream tokenStream(Analyzer analyzer) throws IOException {
+ return null;
+ }
+ });
+ iw.addDocument(list);
+ fail("didn't get any exception, boost silently discarded");
+ } catch (UnsupportedOperationException expected) {
+ // expected
+ }
+ DirectoryReader ir = DirectoryReader.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_4x/lucene/core/src/test/org/apache/lucene/search/TestPositionIncrement.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestPositionIncrement.java?rev=1369199&r1=1369198&r2=1369199&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestPositionIncrement.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestPositionIncrement.java Fri Aug 3 20:40:18 2012
@@ -206,7 +206,7 @@ public class TestPositionIncrement exten
RandomIndexWriter writer = new RandomIndexWriter(random(), dir, new MockPayloadAnalyzer());
Document doc = new Document();
doc.add(new TextField("content", new StringReader(
- "a a b c d e a f g h i j a b k k"), Field.Store.NO));
+ "a a b c d e a f g h i j a b k k")));
writer.addDocument(doc);
final IndexReader readerFromWriter = writer.getReader();
Modified: lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestSort.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestSort.java?rev=1369199&r1=1369198&r2=1369199&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestSort.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/TestSort.java Fri Aug 3 20:40:18 2012
@@ -207,7 +207,7 @@ public class TestSort extends LuceneTest
if (data[i][11] != null) doc.add (new StringField ("parser", data[i][11], Field.Store.NO));
for(IndexableField f : doc.getFields()) {
- if (!f.fieldType().omitNorms()) {
+ if (f.fieldType().indexed() && !f.fieldType().omitNorms()) {
((Field) f).setBoost(2.0f);
}
}
@@ -254,7 +254,7 @@ public class TestSort extends LuceneTest
}
doc.add (new Field ("tracer2", num2, onlyStored));
for(IndexableField f2 : doc.getFields()) {
- if (!f2.fieldType().omitNorms()) {
+ if (f2.fieldType().indexed() && !f2.fieldType().omitNorms()) {
((Field) f2).setBoost(2.0f);
}
}
@@ -274,7 +274,7 @@ public class TestSort extends LuceneTest
doc.add (new Field ("tracer2_fixed", num2Fixed, onlyStored));
for(IndexableField f2 : doc.getFields()) {
- if (!f2.fieldType().omitNorms()) {
+ if (f2.fieldType().indexed() && !f2.fieldType().omitNorms()) {
((Field) f2).setBoost(2.0f);
}
}
Modified: lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/spans/TestPayloadSpans.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/spans/TestPayloadSpans.java?rev=1369199&r1=1369198&r2=1369199&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/spans/TestPayloadSpans.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/search/spans/TestPayloadSpans.java Fri Aug 3 20:40:18 2012
@@ -256,7 +256,7 @@ public class TestPayloadSpans extends Lu
newIndexWriterConfig(TEST_VERSION_CURRENT, new TestPayloadAnalyzer()));
Document doc = new Document();
- doc.add(new TextField("content", new StringReader("a b c d e f g h i j a k"), Field.Store.NO));
+ doc.add(new TextField("content", new StringReader("a b c d e f g h i j a k")));
writer.addDocument(doc);
IndexReader reader = writer.getReader();
@@ -293,7 +293,7 @@ public class TestPayloadSpans extends Lu
newIndexWriterConfig(TEST_VERSION_CURRENT, new TestPayloadAnalyzer()));
Document doc = new Document();
- doc.add(new TextField("content", new StringReader("a b a d k f a h i k a k"), Field.Store.NO));
+ doc.add(new TextField("content", new StringReader("a b a d k f a h i k a k")));
writer.addDocument(doc);
IndexReader reader = writer.getReader();
IndexSearcher is = newSearcher(reader);
@@ -328,7 +328,7 @@ public class TestPayloadSpans extends Lu
newIndexWriterConfig(TEST_VERSION_CURRENT, new TestPayloadAnalyzer()));
Document doc = new Document();
- doc.add(new TextField("content", new StringReader("j k a l f k k p a t a k l k t a"), Field.Store.NO));
+ doc.add(new TextField("content", new StringReader("j k a l f k k p a t a k l k t a")));
writer.addDocument(doc);
IndexReader reader = writer.getReader();
IndexSearcher is = newSearcher(reader);
Modified: lucene/dev/branches/branch_4x/lucene/demo/src/java/org/apache/lucene/demo/IndexFiles.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/demo/src/java/org/apache/lucene/demo/IndexFiles.java?rev=1369199&r1=1369198&r2=1369199&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/demo/src/java/org/apache/lucene/demo/IndexFiles.java (original)
+++ lucene/dev/branches/branch_4x/lucene/demo/src/java/org/apache/lucene/demo/IndexFiles.java Fri Aug 3 20:40:18 2012
@@ -190,7 +190,7 @@ public class IndexFiles {
// so that the text of the file is tokenized and indexed, but not stored.
// Note that FileReader expects the file to be in UTF-8 encoding.
// If that's not the case searching for special characters will fail.
- doc.add(new TextField("contents", new BufferedReader(new InputStreamReader(fis, "UTF-8")), Field.Store.NO));
+ doc.add(new TextField("contents", new BufferedReader(new InputStreamReader(fis, "UTF-8"))));
if (writer.getConfig().getOpenMode() == OpenMode.CREATE) {
// New index, so we just add the document (no old document can be there):
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/CurrencyField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/CurrencyField.java?rev=1369199&r1=1369198&r2=1369199&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/CurrencyField.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/CurrencyField.java Fri Aug 3 20:40:18 2012
@@ -136,9 +136,9 @@ public class CurrencyField extends Field
IndexableField[] f = new IndexableField[field.stored() ? 3 : 2];
SchemaField amountField = getAmountField(field);
- f[0] = amountField.createField(String.valueOf(value.getAmount()), amountField.omitNorms() ? 1F : boost);
+ f[0] = amountField.createField(String.valueOf(value.getAmount()), amountField.indexed() && !amountField.omitNorms() ? boost : 1F);
SchemaField currencyField = getCurrencyField(field);
- f[1] = currencyField.createField(value.getCurrencyCode(), currencyField.omitNorms() ? 1F : boost);
+ f[1] = currencyField.createField(value.getCurrencyCode(), currencyField.indexed() && !currencyField.omitNorms() ? boost : 1F);
if (field.stored()) {
org.apache.lucene.document.FieldType customType = new org.apache.lucene.document.FieldType();
@@ -148,7 +148,7 @@ public class CurrencyField extends Field
if (storedValue.indexOf(",") < 0) {
storedValue += "," + defaultCurrency;
}
- f[2] = createField(field.getName(), storedValue, customType, boost);
+ f[2] = createField(field.getName(), storedValue, customType, 1F);
}
return f;
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/LatLonType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/LatLonType.java?rev=1369199&r1=1369198&r2=1369199&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/LatLonType.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/LatLonType.java Fri Aug 3 20:40:18 2012
@@ -74,18 +74,18 @@ public class LatLonType extends Abstract
}
//latitude
SchemaField lat = subField(field, i);
- f[i] = lat.createField(String.valueOf(latLon[LAT]), lat.omitNorms() ? 1F : boost);
+ f[i] = lat.createField(String.valueOf(latLon[LAT]), lat.indexed() && !lat.omitNorms() ? boost : 1f);
i++;
//longitude
SchemaField lon = subField(field, i);
- f[i] = lon.createField(String.valueOf(latLon[LON]), lon.omitNorms() ? 1F : boost);
+ f[i] = lon.createField(String.valueOf(latLon[LON]), lon.indexed() && !lon.omitNorms() ? boost : 1f);
}
if (field.stored()) {
FieldType customType = new FieldType();
customType.setStored(true);
- f[f.length - 1] = createField(field.getName(), externalVal, customType, boost);
+ f[f.length - 1] = createField(field.getName(), externalVal, customType, 1f);
}
return f;
}
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/PointType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/PointType.java?rev=1369199&r1=1369198&r2=1369199&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/PointType.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/PointType.java Fri Aug 3 20:40:18 2012
@@ -83,7 +83,8 @@ public class PointType extends Coordinat
if (field.indexed()) {
for (int i=0; i<dimension; i++) {
- f[i] = subField(field, i).createField(point[i], boost);
+ SchemaField sf = subField(field, i);
+ f[i] = sf.createField(point[i], sf.indexed() && !sf.omitNorms() ? boost : 1f);
}
}
@@ -91,7 +92,7 @@ public class PointType extends Coordinat
String storedVal = externalVal; // normalize or not?
FieldType customType = new FieldType();
customType.setStored(true);
- f[f.length - 1] = createField(field.getName(), storedVal, customType, boost);
+ f[f.length - 1] = createField(field.getName(), storedVal, customType, 1f);
}
return f;
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/update/DocumentBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/update/DocumentBuilder.java?rev=1369199&r1=1369198&r2=1369199&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/update/DocumentBuilder.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/update/DocumentBuilder.java Fri Aug 3 20:40:18 2012
@@ -235,7 +235,7 @@ public class DocumentBuilder {
SchemaField sfield = schema.getFieldOrNull(name);
boolean used = false;
float boost = field.getBoost();
- boolean omitNorms = sfield != null && sfield.omitNorms();
+ boolean applyBoost = sfield != null && sfield.indexed() && !sfield.omitNorms();
// Make sure it has the correct number
if( sfield!=null && !sfield.multiValued() && field.getValueCount() > 1 ) {
@@ -244,9 +244,9 @@ public class DocumentBuilder {
sfield.getName() + ": " +field.getValue() );
}
- if (omitNorms && boost != 1.0F) {
+ if (applyBoost == false && 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 " +
+ "ERROR: "+getID(doc, schema)+"cannot set an index-time boost, unindexed or norms are omitted for field " +
sfield.getName() + ": " +field.getValue() );
}
@@ -260,7 +260,7 @@ public class DocumentBuilder {
hasField = true;
if (sfield != null) {
used = true;
- addField(out, sfield, v, omitNorms ? 1F : docBoost*boost);
+ addField(out, sfield, v, applyBoost ? docBoost*boost : 1f);
}
// Check if we should copy this field to any other fields.
@@ -282,7 +282,7 @@ public class DocumentBuilder {
if( val instanceof String && cf.getMaxChars() > 0 ) {
val = cf.getLimitedValue((String)val);
}
- addField(out, destinationField, val, destinationField.omitNorms() ? 1F : docBoost*boost);
+ addField(out, destinationField, val, destinationField.indexed() && !destinationField.omitNorms() ? docBoost*boost : 1F);
}
// In lucene, the boost for a given field is the product of the