You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-dev@lucene.apache.org by "Nestor Oviedo (JIRA)" <ji...@apache.org> on 2009/12/17 16:23:25 UTC
[jira] Created: (SOLR-1666) SolrParams conversion to NamedList and
back to SolrParams misses the Arrays with more than one value
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.4, 1.3
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:
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
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Updated: (SOLR-1666) SolrParams conversion to NamedList and
back to SolrParams misses the Arrays with more than one value
Posted by "Nestor Oviedo (JIRA)" <ji...@apache.org>.
[ 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.