[ 
https://issues.apache.org/jira/browse/SOLR-3926?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13504276#comment-13504276
 ] 

Hoss Man commented on SOLR-3926:
--------------------------------

Eirik:

Thanks for bring this up and working on improving things -- I think the 
direction your patch is is taking looks really good, but i have a few comments 
that i think we should try to address before committing...

1) the javadocs for the new methods should clarify that when they refer to 
"field" that can actually be any sortable value (ie: field names, function, 
"score", etc...)

2) we should add javadocs to the deprecated methods explaining why they have 
been deprecated (ie: what limitations they have) with \{@link\} tags pointing 
out the corresponding new methods

3) I don't actually see any advantage in deprecating/removing the "public 
String getSortField()" since it's read only ... we should just document that it 
returns the serialized value of the "sort" param and that for programatic 
access the new methods are available

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).  Even if we're using 
LinkedHashMap unde the covers it seems like it would be far to easy for a naive 
user to let a HashMap make it's way to setSorts and then not understand why the 
final order isn't what they want.

I think it would make a _lot_ more sense to introduce a new tiny little 
immutable "SortClause" class that just models the String+ORDER pair, and have 
all of these methods take/return List<SortClause>.  (It would also help 
simplify the javadocs for all these methods, because only the SortClause class 
would need to explain what the legal values are for the String, w/o cut/pasting 
on each of SolrQuery methods).

What do you think?
                
> 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: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to