You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2011/08/30 22:46:25 UTC
svn commit: r1163370 - in /lucene/dev/trunk/solr: CHANGES.txt
core/src/java/org/apache/solr/handler/JsonLoader.java
core/src/test/org/apache/solr/handler/JsonLoaderTest.java
Author: yonik
Date: Tue Aug 30 20:46:24 2011
New Revision: 1163370
URL: http://svn.apache.org/viewvc?rev=1163370&view=rev
Log:
SOLR-2714: drop null field values in json update format
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/JsonLoader.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1163370&r1=1163369&r2=1163370&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Tue Aug 30 20:46:24 2011
@@ -382,6 +382,10 @@ New Features
specified when CREATEing a new SolrCore using property.* request
params. (Yury Kats, hossman)
+* SOLR-2714: JSON update format - "null" field values are now dropped
+ instead of causing an exception. (Trygve Laugstøl, yonik)
+
+
Optimizations
----------------------
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/JsonLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/JsonLoader.java?rev=1163370&r1=1163369&r2=1163370&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/JsonLoader.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/JsonLoader.java Tue Aug 30 20:46:24 2011
@@ -132,6 +132,7 @@ class JsonLoader extends ContentStreamLo
case JSONParser.NUMBER:
case JSONParser.BIGNUMBER:
case JSONParser.BOOLEAN:
+ case JSONParser.NULL:
log.info( "can't have a value here! "
+JSONParser.getEventString(ev)+" "+parser.getPosition() );
@@ -321,7 +322,7 @@ class JsonLoader extends ContentStreamLo
Stack<Object> stack = new Stack<Object>();
Object obj = null;
boolean inArray = false;
-
+
if( ev != JSONParser.OBJECT_START ) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "object should already be started" );
}
@@ -343,7 +344,7 @@ class JsonLoader extends ContentStreamLo
ev != JSONParser.BIGNUMBER ) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "boost should have number! "+JSONParser.getEventString(ev) );
}
- field.setBoost( Float.valueOf( parser.getNumberChars().toString() ) );
+ field.setBoost((float)parser.getDouble());
}
else if( "value".equals( v ) ) {
// nothing special...
@@ -380,7 +381,25 @@ class JsonLoader extends ContentStreamLo
case JSONParser.BOOLEAN:
addValToField(stack, parser.getBoolean(),inArray, parser);
break;
-
+
+ case JSONParser.NULL:
+ parser.getNull();
+ /*** if we wanted to remove the field from the document now...
+ if (!inArray) {
+ Object o = stack.peek();
+ // if null was only value in the field, then remove the field
+ if (o instanceof SolrInputField) {
+ SolrInputField sif = (SolrInputField)o;
+ if (sif.getValueCount() == 0) {
+ sdoc.remove(sif.getName());
+ }
+ }
+ }
+ ***/
+
+ addValToField(stack, null, inArray, parser);
+ break;
+
case JSONParser.OBJECT_START:
if( stack.isEmpty() ) {
stack.push( new SolrInputDocument() );
@@ -395,7 +414,6 @@ class JsonLoader extends ContentStreamLo
}
}
break;
-
case JSONParser.OBJECT_END:
obj = stack.pop();
if( obj instanceof SolrInputDocument ) {
@@ -436,11 +454,13 @@ class JsonLoader extends ContentStreamLo
if( !(obj instanceof SolrInputField) ) {
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "hymmm ["+parser.getPosition()+"]" );
}
-
+
SolrInputField f = inArray
? (SolrInputField)obj
: (SolrInputField)stack.pop();
-
+
+ if (val == null) return;
+
float boost = (f.getValue()==null)?f.getBoost():1.0f;
f.addValue( val,boost );
}
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java?rev=1163370&r1=1163369&r2=1163370&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java Tue Aug 30 20:46:24 2011
@@ -34,6 +34,7 @@ import org.apache.solr.update.DeleteUpda
import org.apache.solr.update.RollbackUpdateCommand;
import org.apache.solr.update.processor.UpdateRequestProcessor;
import org.junit.BeforeClass;
+import org.junit.Test;
public class JsonLoaderTest extends SolrTestCaseJ4 {
@BeforeClass
@@ -64,7 +65,8 @@ public class JsonLoaderTest extends Solr
" 'boost': 3.45,\n" +
" 'doc': {\n" +
" 'f1': 'v1',\n" +
- " 'f1': 'v2'\n" +
+ " 'f1': 'v2',\n" +
+ " 'f2': null\n" +
" }\n" +
"},\n" +
"\n" +
@@ -102,7 +104,8 @@ public class JsonLoaderTest extends Solr
assertEquals(2, f.getValues().size());
assertEquals(3.45f, d.getDocumentBoost());
assertEquals(false, add.overwrite);
-
+
+ assertEquals(0, d.getField("f2").getValueCount());
// parse the commit commands
assertEquals( 2, p.commitCommands.size() );
@@ -188,6 +191,14 @@ public class JsonLoaderTest extends Solr
req.close();
}
+ @Test
+ public void testNullValues() throws Exception {
+ updateJ("[{'id':'10','foo_s':null,'foo2_s':['hi',null,'there']}]".replace('\'', '"'), params("commit","true"));
+ assertJQ(req("q","id:10", "fl","foo_s,foo2_s")
+ ,"/response/docs/[0]=={'foo2_s':['hi','there']}"
+ );
+ }
+
}