[ 
https://issues.apache.org/jira/browse/SOLR-3926?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Eirik Lygre updated SOLR-3926:
------------------------------

    Attachment: SOLR-3926.patch

This patch implements the API as discussed above. The patch contains javadoc 
and unit tests, and was built against 
http://svn.apache.org/repos/asf/lucene/dev/branches/branch_4x.

This patch solves the original requirements that led to this issue 
(introspection of active sorts), and hopefully also the requirements of the 
Solr project (as represented by [~yo...@apache.org] and [~hossman]).
                
> 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, 
> 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

Reply via email to