mirror of https://github.com/apache/lucene.git
SOLR-5777: Fix ordering of field values in JSON updates where field name key is repeated
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1572262 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e4be54e8b5
commit
087041f8c0
|
@ -93,6 +93,9 @@ Bug Fixes
|
||||||
* SOLR-5423: CSV output doesn't include function field
|
* SOLR-5423: CSV output doesn't include function field
|
||||||
(Arun Kumar, hossman, Steve Rowe)
|
(Arun Kumar, hossman, Steve Rowe)
|
||||||
|
|
||||||
|
* SOLR-5777: Fix ordering of field values in JSON updates where
|
||||||
|
field name key is repeated (hossman)
|
||||||
|
|
||||||
Optimizations
|
Optimizations
|
||||||
----------------------
|
----------------------
|
||||||
* SOLR-1880: Distributed Search skips GET_FIELDS stage if EXECUTE_QUERY
|
* SOLR-1880: Distributed Search skips GET_FIELDS stage if EXECUTE_QUERY
|
||||||
|
|
|
@ -418,11 +418,11 @@ public class JsonLoader extends ContentStreamLoader {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
SolrInputField sif = parseField();
|
SolrInputField sif = parseField();
|
||||||
if (sif == null) return sdoc;
|
if (sif == null) return sdoc;
|
||||||
SolrInputField prev = sdoc.put(sif.getName(), sif);
|
// pulling out hte pieces may seem weird, but it's because
|
||||||
if (prev != null) {
|
// SolrInputDocument.addField will do the right thing
|
||||||
// blech - repeated keys
|
// if the doc already has another value for this field
|
||||||
sif.addValue(prev.getValue(), prev.getBoost());
|
// (ie: repeating fieldname keys)
|
||||||
}
|
sdoc.addField(sif.getName(), sif.getValue(), sif.getBoost());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -550,4 +550,4 @@ public class JsonLoader extends ContentStreamLoader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -209,6 +209,54 @@ public class JsonLoaderTest extends SolrTestCaseJ4 {
|
||||||
req.close();
|
req.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testFieldValueOrdering() throws Exception {
|
||||||
|
final String pre = "{'add':[{'id':'1',";
|
||||||
|
final String post = "},{'id':'2'}]}";
|
||||||
|
|
||||||
|
// list
|
||||||
|
checkFieldValueOrdering((pre+ "'f':[45,67,89]" +post)
|
||||||
|
.replace('\'', '"'),
|
||||||
|
1.0F);
|
||||||
|
// dup fieldname keys
|
||||||
|
checkFieldValueOrdering((pre+ "'f':45,'f':67,'f':89" +post)
|
||||||
|
.replace('\'', '"'),
|
||||||
|
1.0F);
|
||||||
|
// extended w/boost
|
||||||
|
checkFieldValueOrdering((pre+ "'f':{'boost':4.0,'value':[45,67,89]}" +post)
|
||||||
|
.replace('\'', '"'),
|
||||||
|
4.0F);
|
||||||
|
// dup keys extended w/ multiplicitive boost
|
||||||
|
checkFieldValueOrdering((pre+
|
||||||
|
"'f':{'boost':2.0,'value':[45,67]}," +
|
||||||
|
"'f':{'boost':2.0,'value':89}"
|
||||||
|
+post)
|
||||||
|
.replace('\'', '"'),
|
||||||
|
4.0F);
|
||||||
|
|
||||||
|
}
|
||||||
|
private void checkFieldValueOrdering(String rawJson, float fBoost) throws Exception {
|
||||||
|
SolrQueryRequest req = req();
|
||||||
|
SolrQueryResponse rsp = new SolrQueryResponse();
|
||||||
|
BufferingRequestProcessor p = new BufferingRequestProcessor(null);
|
||||||
|
JsonLoader loader = new JsonLoader();
|
||||||
|
loader.load(req, rsp, new ContentStreamBase.StringStream(rawJson), p);
|
||||||
|
assertEquals( 2, p.addCommands.size() );
|
||||||
|
|
||||||
|
SolrInputDocument d = p.addCommands.get(0).solrDoc;
|
||||||
|
assertEquals(2, d.getFieldNames().size());
|
||||||
|
assertEquals("1", d.getFieldValue("id"));
|
||||||
|
assertEquals(new Object[] {45L, 67L, 89L} , d.getFieldValues("f").toArray());
|
||||||
|
assertEquals(0.0F, fBoost, d.getField("f").getBoost());
|
||||||
|
|
||||||
|
d = p.addCommands.get(1).solrDoc;
|
||||||
|
assertEquals(1, d.getFieldNames().size());
|
||||||
|
assertEquals("2", d.getFieldValue("id"));
|
||||||
|
|
||||||
|
req.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void testExtendedFieldValues() throws Exception {
|
public void testExtendedFieldValues() throws Exception {
|
||||||
String str = "[{'id':'1', 'val_s':{'add':'foo'}}]".replace('\'', '"');
|
String str = "[{'id':'1', 'val_s':{'add':'foo'}}]".replace('\'', '"');
|
||||||
SolrQueryRequest req = req();
|
SolrQueryRequest req = req();
|
||||||
|
@ -500,4 +548,4 @@ public class JsonLoaderTest extends SolrTestCaseJ4 {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue