(I wrote some more comments on the SolrQuery sorting functions in the jira
itself; that should probably have been on the mailing list; sorry about
that).

The current state (described in
https://issues.apache.org/jira/browse/SOLR-3926) is that there is a nice
and clean (thanks, Otis!) little patch to extend SolrQuery's sorting
methods. In the process of writing, testing and discussing that, I've found
a couple of bugs in the original SolrQuery sorting methods, and Yonik had
comments on the entire (current) approach to sort fields.

The current SolrQuery implementations of addSortField()/removeSortField()
use the "sort" parameter string stored in SolrQuery (really the parent
ModifiableSolrParams), parsing it and changing it as needed. The methods
assume that the string has a syntax of "field direction,field
direction,field direction", where comma is used to separate the entries.
While this obviously covers the current use cases (or else they wouldn't
work), it will fail as soon as we get into advanced functional sort, for
example the sort string "sum(x_f, y_f) desc, price asc" would break
SolrQuery.removeSortField() and SolrQuery.getSortFields() due to the comma
inside the function.

An alternative approach is suggested by Yonik: "Splitting on whitespace
isn't likely to work to well with everything we can put in the field list
these days (functions, augmenters, etc).
Why not keep sort information in the client code in symbolic form (i.e. not
a serialized string), manipulate it there, and then set to the SolrQuery
right before submitting it?". That should solve the problems outlined
above. However, it would also probably not work well with a pattern that
works today, where you can actually set the full sort string *as a string*
on the SolrQuery, and then manipulate it. So, that will be a regression
that may not be desirable. One way out would be to have a parallel set of
methods that work on symbolic form: These new functions would not be able
to parse a sort string, but they would handle more complex sort
specifications. As a user of SolrQuery, you would use one, but not both, of
these apis.

think I would hope for the following approach:

- Fist, I complete a patch that fixes the current bugs (with the current
implementation) as well as the enhancement request in SOLR-3926, and we get
that commited.
- Afterwards, if we the people of this list thinks we should extend
SolrQuery with better sort manipulation support, I'll volunteer to write
additional methods as described above.

Comments? And it would be nice to have a committer "signed up" for taking
my patch in, when it's done.

Eirik


On Mon, Nov 12, 2012 at 9:35 PM, Eirik Lygre <eirik.ly...@gmail.com> wrote:

> Our search client needs to render the current search information from a
> SolrQuery object. The existing SolrQuery.getSortFields() method returns an
> array of strings of the form "fieldname direction", which the client must
> parse itself. While this is not very difficult, it is orthogonal to the
> concept used for setting sort information, which is based on methods taking
> two parameters: fieldname and an enum indicating sort direction
> (SolrQuery.ORDER).
>
> The issue is logged as https://issues.apache.org/jira/browse/SOLR-3926. I
> have created a patch with a new method "Map<String, ORDER>
> getSortFieldMap()". This method will parse the current search settings, and
> return a typed object which is easier to work with. The patch is created
> against the branch_4x code.
>
> It would be cool if a commiter could look at the issue and the code, and
> give some feedback, and hopefully promote the code into repository.
>
> If required, I will also create a similar patch for trunk.
>
> --
> Eirik
>
> There is no high like a tango high
> There is no low like a tango low
>



-- 
Eirik

There is no high like a tango high
There is no low like a tango low

Reply via email to