问题
Solr 4 beta is out, the GA version will follow soon. Partial document updates has been around for a while as explained here: http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/
However, I haven\'t figured out how to do it with solrj api.
Does anyone knows if it is possible with solrj? Or is solrj just not up-to-speed with this feature?
update: as I describe in the mailing list (see reply here), I found that in the solrj api, the value of a SolrInputField can be a map - it doesn\'t have to be a simple scalar value.
If it is a map, solrj adds an additional update
attribute to the field\'s xml element.
For example,
This code:
SolrInputDocument doc = new SolrInputDocument();
Map<String, String> partialUpdate = new HashMap<String, String>();
partialUpdate.put(\"set\", \"foo\");
doc.addField(\"id\", \"test_123\");
doc.addField(\"description\", partialUpdate);
yields this document:
<doc boost=\"1.0\">
<field name=\"id\">test_123</field>
<field name=\"description\" update=\"set\">foo</field>
</doc>
In this example I used the word \"set\" for this additional attribute, but it doesn\'t work. Solr doesn\'t update the field as I expected. According to this link: http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/ valid values are \"set\" and \"add\".
Any idea?
回答1:
As it turns out, the code snippet shown above in the question actually works. I don't know what was wrong the first time I tried it, perhaps I simply forgot to commit or my schema was misconfigured.
In any case, this question is very localized. However, since the api with the hash map is so poorly documented, I thought maybe it is worth to keep this question and answer.
The key of the hash map can be one of three values:
- set - to set a field.
- add - to add to a multi-valued field.
- inc - to increment a field.
There is an example of this code in the solrj unit tests, in a method called testUpdateField
.
来源:https://stackoverflow.com/questions/12183798/solrj-api-for-partial-document-update