You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by Jack Krupansky <ja...@basetechnology.com> on 2013/05/17 17:39:20 UTC
JSON update bug for multiple set of multi-valued field
In Solr update XML you can initialize a multi-valued field using multiple <field> elements for the same field:
curl http://localhost:8983/solr/update?commit=true \
-H "Content-Type: application/xml" --data-binary '
<add>
<doc>
<field name="id">text-1</field>
<field name="text_ss" update="set">set-mv-text-value1</field>
<field name="text_ss" update="set">set-mv-text-value2</field>
</doc>
</add>'
I would have thought you could do the same with Solr update JSON:
curl http://localhost:8983/solr/update?commit=true \
-H "Content-Type: application/json" --data-binary '
[{"id": "text-1",
"text_ss": {"set": "new-text-value1"},
"text_ss": {"set": "new-text-value2"}
}]'
But, that bizarrely treats the value map as a literal, indexing the field value as:
<arr name="text_ss">
<str>{set=new-text-value2}</str>
<str>{set=new-text-value1}</str>
</arr>
Granted, the better way is to write the command in JSON using an array of values:
curl http://localhost:8983/solr/update?commit=true \
-H "Content-Type: application/json" --data-binary '
[{"id": "text-1",
"text_ss": {"set": ["new-text-value1", "new-text-value2"]}
}]'
Which initializes the field as:
<arr name="text_ss">
<str>new-text-value1</str>
<str>new-text-value2</str>
</arr>
So, the question is: Was my first command “invalid” and should have thrown an exception, or was the treatment of multiple instances of the field name simply treated improperly?
Incidentally, I tried:
curl http://localhost:8983/solr/update?commit=true \
-H "Content-Type: application/json" --data-binary '
[{"id": "text-1",
"text_ss": {"set": "new-text-value1", "set": "new-text-value2"}
}]'
And it simply used the last value for “set”:
<arr name="text_ss">
<str>new-text-value2</str>
</arr>
Again, is this contract behavior, invalid and should throw an exception, or a bug that should be fixed to do the obvious thing?
-- Jack Krupansky