42 |
|
|
43 |
my $sw; |
my $sw; |
44 |
|
|
45 |
|
my $sort_map = { |
46 |
|
'date' => 'date_utime', |
47 |
|
'from' => 'from_phrase', |
48 |
|
'to' => 'to_phrase', |
49 |
|
'rank' => 'swishrank', |
50 |
|
}; |
51 |
|
|
52 |
|
my $sort_by; |
53 |
|
|
54 |
foreach my $s (@_) { |
foreach my $s (@_) { |
55 |
|
|
56 |
if ($s =~ /^\s*(\w+):(.+)\s*$/) { |
if ($s =~ /^\s*(\w+):(.+)\s*$/) { |
57 |
$sw .= "$1=($2)"; |
my ($f,$v) = ($1,$2); |
58 |
|
if (lc($f) eq "sort") { |
59 |
|
my ($sf,$sv) = split(/ /,$v,2); |
60 |
|
$sort_by = $sort_map->{$sf} || croak "unsupported sort by field $v - fix sort_map"; |
61 |
|
$sort_by .= " $sv"; |
62 |
|
} else { |
63 |
|
$sw .= "$f=($v)"; |
64 |
|
} |
65 |
} else { |
} else { |
66 |
# and/or/not operators |
# and/or/not operators |
67 |
$sw .= " $s "; |
$sw .= " $s "; |
72 |
|
|
73 |
# convert to UTF-8 |
# convert to UTF-8 |
74 |
$sw = $iso2utf->convert($sw) || $sw; |
$sw = $iso2utf->convert($sw) || $sw; |
75 |
my $results = $index->Query($sw); |
|
76 |
|
my $search = $index->New_Search_Object; |
77 |
|
$search->SetSort( $sort_by ); |
78 |
|
my $results = $search->Execute($sw); |
79 |
|
|
80 |
# store total number of hits |
# store total number of hits |
81 |
$self->{'total_hits'} = $results->Hits; |
$self->{'total_hits'} = $results->Hits; |