Hi, Sami. Doing some tests I´ve used the same code as you and did a quick execution:
*HttpSolrServer server = new HttpSolrServer(" http://localhost:8080/solrserver/core1<http://localhost:10080/newscover_es/items_es> ");* * * * try {* * * * HashMap editTags = new HashMap();* * editTags.put("set", new String[]{"tag1","tag2","tag3"});* * doc.addField("myField", editTags);* * server.add(doc);* * server.commit(true, true);* * * * } catch (SolrServerException e) {* * e.printStackTrace();* * } catch (IOException e) {* * e.printStackTrace();* * }* * * * * And the resultant doc is wrong: <response> <lst name="responseHeader"> <int name="status">0</int> <int name="QTime">1</int> <lst name="params"> <str name="q">*:*</str> </lst> </lst> <result name="response" numFound="1" start="0"> <doc> <str name="i_id">50a0f1f90cf226fb5677fe13</str> <arr name="myField"> *<str>[Ljava.lang.String;@7d5e90cb</str> ---> toString() from String[] array.* </arr> <long name="_version_">1418710023780958208</long> </doc> </result> </response> So is definetely executing toString() method in both *HttpSolrServer *and * CloudServer*. Tips: - I´m using* Solrj 4.0.0 *artifact version in a *Maven *project. - The fields to be updated are *dynamicFields*. - I´m using Java jdk6. Alternatives: - I´m doing something wrong and I´m so stupid that I can´t see it, :-( - The way I update fields is not the correct one. - There is a general bug with atomic updates via SolrJ. Regards, - Luis Cappa. 2012/11/15 Luis Cappa Banda <luisca...@gmail.com> > I´ll have a look to Solr source code and try to fix the bug. If I succeed > I´ll update JIRA issue with it, :-) > > > 2012/11/15 Sami Siren <ssi...@gmail.com> > >> Actually it seems that xml/binary request writers only behave differently >> when using array[] as the value. if I use ArrayList it also works with the >> xml format (4.1 branch). Still it's annoying that the two request writers >> behave differently so I guess it's worth adding the jira anyway. >> >> The Affects version should be 4.0. >> >> >> On Thu, Nov 15, 2012 at 1:42 PM, Luis Cappa Banda <luisca...@gmail.com >> >wrote: >> >> > Hello, Sami. >> > >> > It will be the first issue that I open so, should I create it under Solr >> > 4.0 version or in Solr 4.1.0 one? >> > >> > Thanks, >> > >> > - Luis Cappa. >> > >> > 2012/11/15 Sami Siren <ssi...@gmail.com> >> > >> > > On Thu, Nov 15, 2012 at 11:51 AM, Luis Cappa Banda < >> luisca...@gmail.com >> > > >wrote: >> > > >> > > > Thread update: >> > > > >> > > > When I use a simple: >> > > > >> > > > *Map operation = new HashMap();* >> > > > >> > > > >> > > > Instead of: >> > > > >> > > > *Map<String, List<String>> operation = new HashMap<String, >> > > > List<String>>();* >> > > > >> > > > >> > > > The result looks better, but it´s still wrong: >> > > > >> > > > fieldName: [ >> > > > "[Value1, Value2]" >> > > > ], >> > > > >> > > > >> > > > However, List<String> value is received as a simple String >> "[Value1, >> > > > Value2]". In other words, SolrJ is internally executing a toString() >> > > > operation to the List<Sring>. Is impossible to update atomically a >> > > > multivalued field with a List of values in just one atomic update >> > > > operation? >> > > > >> > > >> > > Seems to be working fine here with HttpSolrServer / >> BinaryRequestWriter; >> > > >> > > HashMap editTags = new HashMap(); >> > > editTags.put("set", new String[]{"tag1","tag2","tag3"}); >> > > doc = new SolrInputDocument(); >> > > doc.addField("id", "unique"); >> > > doc.addField("tags_ss", editTags); >> > > server.add(doc); >> > > server.commit(true, true); >> > > resp = server.query(q); >> > > >> > System.out.println(resp.getResults().get(0).getFirstValue("tags_ss")); >> > > >> > > prints "tag1" >> > > >> > > ArrayList<String> as a value works the same way as String[]. >> > > >> > > When using xml (RequestWriter) I can see the problem that you are >> > > describing, can you add a jira for that? >> > > >> > > -- >> > > Sami SIren >> > > >> > > >> > > >> > > >> > > >> > > > >> > > > Regards, >> > > > >> > > > >> > > > - Luis Cappa. >> > > > >> > > > 2012/11/15 Luis Cappa Banda <luisca...@gmail.com> >> > > > >> > > > > Hello everyone, >> > > > > >> > > > > I´ve tested atomic updates via Ajax calls and now I´m starting >> with >> > > > atomic >> > > > > updates via SolrJ... but the way I´m proceeding doesn´t seem to >> work >> > > > well. >> > > > > Here is the snippet: >> > > > > >> > > > > *SolrInputDocument do = ne SolrInputDocument();* >> > > > > *doc.addField("id", "myId");* >> > > > > * >> > > > > * >> > > > > *Map<String, List<String>> operation = new HashMap<String, >> > > > > List<String>>();* >> > > > > *operation.put("set", [[a list of String elements]]); // I want a >> > set >> > > > > operation to override field values.* >> > > > > *doc.addField("fieldName", operation);* >> > > > > * >> > > > > * >> > > > > *cloudSolrServer.add(doc); // Atomic update operation.* >> > > > > >> > > > > >> > > > > And after updating the resultant doc is as follows: >> > > > > >> > > > > *doc: {* >> > > > > * >> > > > > * >> > > > > *...* >> > > > > * >> > > > > * >> > > > > *fieldName: [ "{set=values}"* >> > > > > *],* >> > > > > * >> > > > > * >> > > > > *...* >> > > > > >> > > > > * >> > > > > * >> > > > > >> > > > > *}* >> > > > > >> > > > > In other words, the map which includes the "set" operation and the >> > > field >> > > > > values is String formatted and that String is used to update the >> > field, >> > > > :-/ >> > > > > >> > > > > What is the correct way to update just one or more fields with >> SolrJ? >> > > > > >> > > > > >> > > > > Regards, >> > > > > >> > > > > -- >> > > > > >> > > > > - Luis Cappa >> > > > > >> > > > > >> > > > >> > > > >> > > > -- >> > > > >> > > > - Luis Cappa >> > > > >> > > >> > >> > >> > >> > -- >> > >> > - Luis Cappa >> > >> > > > > -- > > - Luis Cappa > > -- - Luis Cappa