[
https://issues.apache.org/jira/browse/SOLR-3926?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13504303#comment-13504303
]
Yonik Seeley commented on SOLR-3926:
------------------------------------
bq. Lastly: I'm really not a fan of having "setSorts" and "getSorts" use
"Map<String, ORDER>" in their APIs ... (I know, it was yonik's idea on the
mailing list ... i cringed when i read that).
I was just running with what seemed to be the implied requirement (which
appeared to be random access-by-name to the sort criteria). Thinking about it
a second longer though, I can't see any obvious use cases for that.
List<SortClause> does seem more natural.
> 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
> Priority: Minor
> Fix For: 4.1
>
> Attachments: 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: [email protected]
For additional commands, e-mail: [email protected]