[ https://issues.apache.org/jira/browse/SOLR-3926?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Erick Erickson updated SOLR-3926: --------------------------------- Attachment: SOLR-3926.patch Changed comments to "since 4.2" since I didn't get this done promptly. Tests pass on trunk, if there are no objections I'll commit this tomorrow (Friday). > solrj should support better way of finding active sorts > ------------------------------------------------------- > > Key: SOLR-3926 > URL: https://issues.apache.org/jira/browse/SOLR-3926 > Project: Solr > Issue Type: Improvement > Components: clients - java > Affects Versions: 4.0 > Reporter: Eirik Lygre > Assignee: Erick Erickson > Priority: Minor > Fix For: 4.2 > > Attachments: SOLR-3926.patch, SOLR-3926.patch, SOLR-3926.patch, > SOLR-3926.patch, SOLR-3926.patch > > > The Solrj api uses ortogonal concepts for setting/removing and getting sort > information. Setting/removing uses a combination of (name,order), while > getters return a String "name order": > {code} > public SolrQuery setSortField(String field, ORDER order); > public SolrQuery addSortField(String field, ORDER order); > public SolrQuery removeSortField(String field, ORDER order); > public String[] getSortFields(); > public String getSortField(); > {code} > If you want to use the current sort information to present a list of active > sorts, with the possibility to remove then, you need to manually parse the > string(s) returned from getSortFields, to recreate the information required > by removeSortField(). Not difficult, but not convenient either :-) > Therefore this suggestion: Add a new method {{public Map<String,ORDER> > getSortFieldMap();}} which returns an ordered map of active sort fields. This > will make introspection of the current sort setup much easier. > {code} > public Map<String, ORDER> getSortFieldMap() { > String[] actualSortFields = getSortFields(); > if (actualSortFields == null || actualSortFields.length == 0) > return Collections.emptyMap(); > Map<String, ORDER> sortFieldMap = new LinkedHashMap<String, ORDER>(); > for (String sortField : actualSortFields) { > String[] fieldSpec = sortField.trim().split(" "); > sortFieldMap.put(fieldSpec[0], ORDER.valueOf(fieldSpec[1])); > } > return Collections.unmodifiableMap(sortFieldMap); > } > {code} > For what it's worth, this is possible client code: > {code} > System.out.println("Active sorts"); > Map<String, ORDER> fieldMap = getSortFieldMap(query); > for (String field : fieldMap.keySet()) { > System.out.println("- " + field + "; dir=" + fieldMap.get(field)); > } > {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org