153 |
my $self = shift; |
my $self = shift; |
154 |
|
|
155 |
my $site = shift || $self->{defaultnode}; |
my $site = shift || $self->{defaultnode}; |
156 |
|
if (! $site) { |
157 |
|
$self->{log}->warn("not changing site from " . $self->{est_node}->{url}); |
158 |
|
return; |
159 |
|
} |
160 |
|
|
161 |
$self->{log}->fatal("setup_site can't find site or defaultnode") unless ($site); |
$self->{log}->fatal("setup_site can't find site or defaultnode") unless ($site); |
162 |
|
|
163 |
my $url = $self->{masterurl} . '/node/' . $site; |
my $url = $self->{masterurl} . '/node/' . $site; |
164 |
$self->{est_node}->set_url( $url ); |
$self->{est_node}->set_url( $url ); |
165 |
$self->{log}->debug("setup_site $site using $url"); |
$self->{log}->debug("setup_site '$site' using $url"); |
166 |
} |
} |
167 |
|
|
168 |
=head2 search |
=head2 search |
197 |
|
|
198 |
my $template_filename = $args->{template} || $self->{template}; |
my $template_filename = $args->{template} || $self->{template}; |
199 |
|
|
200 |
$args->{max} ||= $self->{'hits_for_pager'}; |
$args->{hits_on_page} ||= $self->{'hits_for_pager'}; |
201 |
if (! $args->{max}) { |
if (! $args->{hits_on_page}) { |
202 |
$args->{max} = 100; |
$args->{hits_on_page} = 100; |
203 |
$log->warn("max not set when calling model. Using default of $args->{max}"); |
$log->warn("max not set when calling model. Using default of $args->{hits_on_page}"); |
204 |
} |
} |
205 |
|
|
206 |
my $times; # store some times for benchmarking |
my $times; # store some times for benchmarking |
215 |
} |
} |
216 |
$args->{depth} ||= 0; |
$args->{depth} ||= 0; |
217 |
|
|
218 |
$log->debug("searching for maximum $args->{max} results using depth $args->{depth} phrase: ", $query || '[none]'); |
$log->debug("searching " . $self->{est_node}->{url} . " hits on page: $args->{hits_on_page} depth: $args->{depth} phrase: " . ($query || '[none]') ); |
219 |
|
|
220 |
# |
# |
221 |
# construct condition for Hyper Estraier |
# construct condition for Hyper Estraier |
233 |
$cond->set_options( $args->{options} ) if ($args->{options}); |
$cond->set_options( $args->{options} ) if ($args->{options}); |
234 |
$cond->set_order( $args->{order} ) if ($args->{order}); |
$cond->set_order( $args->{order} ) if ($args->{order}); |
235 |
|
|
236 |
my $max = $args->{max} || 7; |
my $hits_on_page = $args->{hits_on_page} || 7; |
237 |
my $page = $args->{page} || 1; |
my $page = $args->{page} || 1; |
238 |
if ($page < 1) { |
if ($page < 1) { |
239 |
$log->warn("page number $page < 1"); |
$log->warn("page number $page < 1"); |
240 |
$page = 1; |
$page = 1; |
241 |
} |
} |
242 |
|
|
243 |
$cond->set_max( $page * $max ); |
$cond->set_max( my $max = $page * $hits_on_page ); |
244 |
|
$cond->set_skip( my $skip = ( $page - 1 ) * $hits_on_page ); |
245 |
|
|
246 |
|
$log->debug("search max: $max, skip: $skip"); |
247 |
|
|
248 |
my $result = $self->{est_node}->search($cond, $args->{depth}); |
my $result = $self->{est_node}->search($cond, $args->{depth}); |
249 |
if (! $result) { |
if (! $result) { |
257 |
$log->debug( sprintf("search took %.6fs and returned $hits hits.", $times->{est}) ); |
$log->debug( sprintf("search took %.6fs and returned $hits hits.", $times->{est}) ); |
258 |
|
|
259 |
$self->{hints} = $result->{hints}; |
$self->{hints} = $result->{hints}; |
260 |
$log->dumper($self->{hints}, 'original hints' ); |
#$log->dumper($self->{hints}, 'original hints' ); |
261 |
|
|
262 |
# |
# |
263 |
# fetch results |
# fetch results |
265 |
|
|
266 |
my @results; |
my @results; |
267 |
|
|
268 |
for my $i ( (($page - 1) * $max) .. ( $hits - 1 ) ) { |
|
269 |
|
|
270 |
|
for my $i ( 0 .. ( $hits < $max ? ($hits-1) : ($max-1) ) ) { |
271 |
|
|
272 |
$t = time(); |
$t = time(); |
273 |
|
|
364 |
|
|
365 |
while (my ($key,$val) = each %{ $self->{hints} }) { |
while (my ($key,$val) = each %{ $self->{hints} }) { |
366 |
|
|
367 |
|
#$self->{log}->debug("current hint $key = $val"); |
368 |
|
|
369 |
if ($key =~ m/^(?:HITS*|TIME|DOCNUM|WORDNUM)$/) { |
if ($key =~ m/^(?:HITS*|TIME|DOCNUM|WORDNUM)$/) { |
370 |
$hints->{ lc($key) } = $val; |
$hints->{ lc($key) } = $val; |
371 |
} elsif ($key =~ m/^HINT#/) { |
} elsif ($key =~ m/^HINT#/) { |
375 |
my ($url,undef,undef,undef,undef,undef,$results) = split(/\t/,$val,7); |
my ($url,undef,undef,undef,undef,undef,$results) = split(/\t/,$val,7); |
376 |
if ($url =~ m#/node/(.+)$#) { |
if ($url =~ m#/node/(.+)$#) { |
377 |
$hints->{node}->{$1} = $results; |
$hints->{node}->{$1} = $results; |
378 |
|
} else { |
379 |
|
$self->{log}->debug("url $url doesn't have /node/ in it!"); |
380 |
} |
} |
381 |
|
} else { |
382 |
|
$self->{log}->debug("unknown hint $key = $val"); |
383 |
} |
} |
384 |
|
|
385 |
} |
} |
386 |
|
|
387 |
$self->{log}->dumper($hints, 'model hints' ); |
$self->{log}->dumper($hints, 'model hints' ); |
448 |
Return all databases which have records for selected site. Returned array of |
Return all databases which have records for selected site. Returned array of |
449 |
hashes has elements C<name> and C<label>. |
hashes has elements C<name> and C<label>. |
450 |
|
|
451 |
|
This function does cacheing inside C<< $self->{nodes_in_site} >>, but you |
452 |
|
probably didn't want to know that. |
453 |
|
|
454 |
=cut |
=cut |
455 |
|
|
456 |
sub list_nodes { |
sub list_nodes { |
457 |
my $self = shift; |
my $self = shift; |
458 |
|
|
459 |
my $site = shift; |
my $site = shift || $self->{defaultnode}; |
460 |
|
|
461 |
|
# cache? |
462 |
|
if ($self->{nodes_in_site}->{$site} && ref($self->{nodes_in_site}->{$site}) eq 'ARRAY') { |
463 |
|
$self->{log}->debug("list_nodes for site $site and returns from cache"); |
464 |
|
return @{ $self->{nodes_in_site}->{$site} }; |
465 |
|
}; |
466 |
|
|
467 |
$self->{log}->debug("list_nodes use site $site"); |
$self->{log}->debug("list_nodes for site $site"); |
468 |
|
|
469 |
$self->setup_site( $site ); |
$self->setup_site( $site ); |
470 |
|
|
505 |
$self->setup_site( $site ); |
$self->setup_site( $site ); |
506 |
$self->{est_node}->_set_info; |
$self->{est_node}->_set_info; |
507 |
|
|
508 |
$self->{log}->dumper( \@nodes, 'nodes' ); |
$self->{nodes_in_site}->{$site} = \@nodes; |
509 |
|
|
510 |
return @nodes; |
return @nodes; |
511 |
} |
} |