[ https://issues.apache.org/jira/browse/SOLR-1666?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Nestor Oviedo updated SOLR-1666: -------------------------------- Description: When a parameter in a SolrParams instance is an Array that has more than one element, the method SolrParams.toNamedList() generates a NamedList<Object> correctly, but when the method SolrParams.toSolrParams() is invoked with that NamedList instance, the resultant SolrParams instance has that parameter as a String, wich is the result of the String[].toString() method. TestCase: {code} public class TestDismaxQParserPlugin extends DisMaxQParserPlugin { private Log log = LogFactory.getLog(this.getClass()); public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) { // TestCase with the param facet.field if(params.getParams(FacetParams.FACET_FIELD) != null) { // Original Values log.debug("FACET.FIELD Param - Before"); String[] facetFieldBefore = params.getParams(FacetParams.FACET_FIELD); log.debug("toString():"+facetFieldBefore.toString()); log.debug("length:"+facetFieldBefore.length); log.debug("Elements:"); for(String value : facetFieldBefore) log.debug("[class "+value.getClass().getName()+"] "+value); // Transforming NamedList<Object> paramsList = params.toNamedList(); params = SolrParams.toSolrParams(paramsList); // Result Values log.debug("FACET.FIELD Param - After"); String[] facetFieldAfter = params.getParams(FacetParams.FACET_FIELD); log.debug("toString():"+facetFieldAfter.toString()); log.debug("length:"+facetFieldAfter.length); log.debug("Elements:"); for(String value : facetFieldAfter) log.debug("[class "+value.getClass().getName()+"] "+value); } else { log.debug("FACET.FIELD NOT SPECIFIED"); } return super.createParser(qstr, localParams, params, req); } } {code} Editing the solrconfig.xml file for this QueryParser to be used and using an URL like "http://host:port/path/select?q=something&facet=true&facet.field=subject&facet.field=date" the output is (only the interesting lines): FINA: FACET.FIELD Param - Before FINA: toString():[Ljava.lang.String;@c96ad7c FINA: length:2 FINA: Elements: FINA: [class java.lang.String] subject FINA: [class java.lang.String] date FINA: FACET.FIELD Param - After FINA: toString():[Ljava.lang.String;@44775121 FINA: length:1 FINA: Elements: FINA: [class java.lang.String] [Ljava.lang.String;@c96ad7c was: When a parameter in a SolrParams instance is an Array that has more than one element, the method SolrParams.toNamedList() generates a NamedList<Object> correctly, but when the method SolrParams.toSolrParams() is invoked with that NamedList instance, the resultant SolrParams instance has that parameter as a String, wich is the result of the String[].toString() method. TestCase: public class TestDismaxQParserPlugin extends DisMaxQParserPlugin { private Log log = LogFactory.getLog(this.getClass()); public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) { // TestCase with the param facet.field if(params.getParams(FacetParams.FACET_FIELD) != null) { // Original Values log.debug("FACET.FIELD Param - Before"); String[] facetFieldBefore = params.getParams(FacetParams.FACET_FIELD); log.debug("toString():"+facetFieldBefore.toString()); log.debug("length:"+facetFieldBefore.length); log.debug("Elements:"); for(String value : facetFieldBefore) log.debug("[class "+value.getClass().getName()+"] "+value); // Transforming NamedList<Object> paramsList = params.toNamedList(); params = SolrParams.toSolrParams(paramsList); // Result Values log.debug("FACET.FIELD Param - After"); String[] facetFieldAfter = params.getParams(FacetParams.FACET_FIELD); log.debug("toString():"+facetFieldAfter.toString()); log.debug("length:"+facetFieldAfter.length); log.debug("Elements:"); for(String value : facetFieldAfter) log.debug("[class "+value.getClass().getName()+"] "+value); } else { log.debug("FACET.FIELD NOT SPECIFIED"); } return super.createParser(qstr, localParams, params, req); } } Editing the solrconfig.xml file for this QueryParser to be used and using an URL like "http://host:port/path/select?q=something&facet=true&facet.field=subject&facet.field=date" the output is (only the interesting lines): FINA: FACET.FIELD Param - Before FINA: toString():[Ljava.lang.String;@c96ad7c FINA: length:2 FINA: Elements: FINA: [class java.lang.String] subject FINA: [class java.lang.String] date FINA: FACET.FIELD Param - After FINA: toString():[Ljava.lang.String;@44775121 FINA: length:1 FINA: Elements: FINA: [class java.lang.String] [Ljava.lang.String;@c96ad7c > SolrParams conversion to NamedList and back to SolrParams misses the Arrays > with more than one value > ---------------------------------------------------------------------------------------------------- > > Key: SOLR-1666 > URL: https://issues.apache.org/jira/browse/SOLR-1666 > Project: Solr > Issue Type: Bug > Components: search > Affects Versions: 1.3, 1.4 > Reporter: Nestor Oviedo > Priority: Minor > > When a parameter in a SolrParams instance is an Array that has more than one > element, the method SolrParams.toNamedList() generates a NamedList<Object> > correctly, but when the method SolrParams.toSolrParams() is invoked with that > NamedList instance, the resultant SolrParams instance has that parameter as a > String, wich is the result of the String[].toString() method. > TestCase: > {code} > public class TestDismaxQParserPlugin extends DisMaxQParserPlugin { > private Log log = LogFactory.getLog(this.getClass()); > public QParser createParser(String qstr, SolrParams localParams, > SolrParams params, SolrQueryRequest req) { > // TestCase with the param facet.field > if(params.getParams(FacetParams.FACET_FIELD) != null) { > // Original Values > log.debug("FACET.FIELD Param - Before"); > String[] facetFieldBefore = > params.getParams(FacetParams.FACET_FIELD); > log.debug("toString():"+facetFieldBefore.toString()); > log.debug("length:"+facetFieldBefore.length); > log.debug("Elements:"); > for(String value : facetFieldBefore) > log.debug("[class > "+value.getClass().getName()+"] "+value); > > // Transforming > NamedList<Object> paramsList = params.toNamedList(); > params = SolrParams.toSolrParams(paramsList); > // Result Values > log.debug("FACET.FIELD Param - After"); > String[] facetFieldAfter = > params.getParams(FacetParams.FACET_FIELD); > log.debug("toString():"+facetFieldAfter.toString()); > log.debug("length:"+facetFieldAfter.length); > log.debug("Elements:"); > for(String value : facetFieldAfter) > log.debug("[class > "+value.getClass().getName()+"] "+value); > } else { > log.debug("FACET.FIELD NOT SPECIFIED"); > } > return super.createParser(qstr, localParams, params, req); > } > } > {code} > Editing the solrconfig.xml file for this QueryParser to be used and using an > URL like > "http://host:port/path/select?q=something&facet=true&facet.field=subject&facet.field=date" > the output is (only the interesting lines): > FINA: FACET.FIELD Param - Before > FINA: toString():[Ljava.lang.String;@c96ad7c > FINA: length:2 > FINA: Elements: > FINA: [class java.lang.String] subject > FINA: [class java.lang.String] date > FINA: FACET.FIELD Param - After > FINA: toString():[Ljava.lang.String;@44775121 > FINA: length:1 > FINA: Elements: > FINA: [class java.lang.String] [Ljava.lang.String;@c96ad7c -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.