Hello Yue, I'm not familiar with this part of the code but wanted to share that changing the Http2SolrClient.java code locally on main branch like this
- Fields fields = new Fields(); + Fields fields = new Fields(true); does pass tests when run locally. Though perhaps that could be due to lack of test coverage similar to the f.case_sensitive_field.facet.limit=5 & f.CASE_SENSITIVE_FIELD.facet.limit=99 usage you mention. Hope that helps. Christine From: users@solr.apache.org At: 03/25/24 16:09:15 UTCTo: users@solr.apache.org Subject: solr9.5.0/solrj9.5.0 bugs in shard request Hello, I found an issue in solr9.5.0/solrj9.5.0 regarding shard requests: As of now, the multi-shard requests are sent through Http2SolrClient, and this function composes the actual Jetty Request object: > private Request fillContentStream( Request req, Collection<ContentStream> > streams, ModifiableSolrParams wparams, boolean isMultipart) throws > IOException { if (isMultipart) { // multipart/form-data try > (MultiPartRequestContent content = new MultiPartRequestContent()) { > Iterator<String> iter = wparams.getParameterNamesIterator(); while > (iter.hasNext()) { String key = iter.next(); String[] vals = > wparams.getParams(key); if (vals != null) { for (String val : vals) { > content.addFieldPart(key, new StringRequestContent(val), null); } } } if > (streams != null) { for (ContentStream contentStream : streams) { String > contentType = contentStream.getContentType(); if (contentType == null) { > contentType = "multipart/form-data"; // default } String name = > contentStream.getName(); if (name == null) { name = ""; } > HttpFields.Mutable fields = HttpFields.build(1); > fields.add(HttpHeader.CONTENT_TYPE, contentType); content.addFilePart( > name, contentStream.getName(), new > InputStreamRequestContent(contentStream.getStream()), fields); } } > req.body(content); } } else { // application/x-www-form-urlencoded Fields > fields = new Fields(); Iterator<String> iter = > wparams.getParameterNamesIterator(); while (iter.hasNext()) { String key = > iter.next(); String[] vals = wparams.getParams(key); if (vals != null) { > for (String val : vals) { fields.add(key, val); } } } req.body(new > FormRequestContent(fields, FALLBACK_CHARSET)); } return req; } > The problem is the use of this class *Fields fields = new Fields(); * where caseSensitive=false by default, this leads to case sensitive solr params being merged together. For example f.case_sensitive_field.facet.limit=5 & f.CASE_SENSITIVE_FIELD.facet.limit=99 Not sure if this is intentional for some reason? Best, Yue