--- trunk/MWS_swish.pm 2004/05/08 02:21:50 23 +++ trunk/MWS_swish.pm 2004/05/08 14:27:54 24 @@ -42,10 +42,26 @@ my $sw; + my $sort_map = { + 'date' => 'date_utime', + 'from' => 'from_phrase', + 'to' => 'to_phrase', + 'rank' => 'swishrank', + }; + + my $sort_by; + foreach my $s (@_) { if ($s =~ /^\s*(\w+):(.+)\s*$/) { - $sw .= "$1=($2)"; + my ($f,$v) = ($1,$2); + if (lc($f) eq "sort") { + my ($sf,$sv) = split(/ /,$v,2); + $sort_by = $sort_map->{$sf} || croak "unsupported sort by field $v - fix sort_map"; + $sort_by .= " $sv"; + } else { + $sw .= "$f=($v)"; + } } else { # and/or/not operators $sw .= " $s "; @@ -56,7 +72,10 @@ # convert to UTF-8 $sw = $iso2utf->convert($sw) || $sw; - my $results = $index->Query($sw); + + my $search = $index->New_Search_Object; + $search->SetSort( $sort_by ); + my $results = $search->Execute($sw); # store total number of hits $self->{'total_hits'} = $results->Hits;