Henry
2008-Dec-11 07:25 UTC
[Xapian-discuss] set_sort_by_relevance_then_value() sort order when using float
Greetings, I'm using revision 11684 with chert as the backend. Sorting with set_sort_by_relevance_then_value(n) I'm getting the following unexpected behaviour: "a" score:100 value(n):0.15 "b" score:99 value(n):0.15 "c" score:99 value(n):0 ... [ several matches with score:99, value(n):0 ] ... "i" score:99 value(n):0.151801582149415 <-- should be ranked second. value(n) is stored by the indexer with sortable_serialise(). Is it because value(n) is a float? I found http://thread.gmane.org/gmane.comp.search.xapian.general/6460/focus=6469 which indicates that serialise_double() cannot be used for sorting. Thanks Henry
Olly Betts
2008-Dec-11 19:57 UTC
[Xapian-discuss] set_sort_by_relevance_then_value() sort order when using float
On Thu, Dec 11, 2008 at 09:25:20AM +0200, Henry wrote:> Sorting with set_sort_by_relevance_then_value(n) I'm getting the > following unexpected behaviour: > > "a" score:100 value(n):0.15 > "b" score:99 value(n):0.15 > "c" score:99 value(n):0 > ... > [ several matches with score:99, value(n):0 ] > ... > "i" score:99 value(n):0.151801582149415 <-- should be ranked second.Although the percentage score is 99 for both documents, if you look at the actual weight, I bet that'll be less for this document than the second one. And it's the weight which is sorted on when sorting by relevance.> value(n) is stored by the indexer with sortable_serialise(). > > Is it because value(n) is a float? I found > http://thread.gmane.org/gmane.comp.search.xapian.general/6460/focus=6469 which > indicates that serialise_double() cannot be used for sorting.As my reply two messages later says, serialise_double() isn't an external API function, but sortable_serialise() is suitable for sorting floating point values. Cheers, Olly