/[webpac2]/Webpacus/lib/Webpacus/Controller/Search.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /Webpacus/lib/Webpacus/Controller/Search.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 143 - (hide annotations)
Fri Nov 25 01:24:31 2005 UTC (18 years, 5 months ago) by dpavlin
File size: 1699 byte(s)
 r9125@llin:  dpavlin | 2005-11-25 02:25:59 +0100
 added hits_on_page and hits_for_suggest to fine-tune your queries (and speed)

1 dpavlin 109 package Webpacus::Controller::Search;
2    
3     use strict;
4     use warnings;
5     use base 'Catalyst::Controller';
6    
7     use lib '/data/webpac2/lib';
8     use WebPAC::Search::Estraier;
9    
10     =head1 NAME
11    
12     Webpacus::Controller::Search - Catalyst Controller
13    
14     =head1 SYNOPSIS
15    
16     See L<Webpacus>
17    
18     =head1 DESCRIPTION
19    
20     Catalyst Controller for autocompleting search fields.
21    
22     =head1 METHODS
23    
24     =over 4
25    
26     =item default
27    
28     =cut
29    
30     sub default : Private {
31     my ( $self, $c ) = @_;
32     $c->stash->{template} = 'search.tt';
33     }
34    
35     =item suggest
36    
37     Returns results for URLs like C<search/suggest/FieldName>
38    
39     =cut
40    
41     sub suggest : Regex('^search/suggest/*([^/]*)') {
42 dpavlin 143 my ( $self, $c ) = @_;
43 dpavlin 109
44 dpavlin 143 my $what = $c->request->snippets->[0];
45 dpavlin 109
46 dpavlin 143 my $log = $c->log;
47 dpavlin 109
48 dpavlin 143 my $est_conf = $c->config->{hyperestraier};
49     $est_conf->{log} = $c->log;
50 dpavlin 109
51 dpavlin 143 my $est = new WebPAC::Search::Estraier( %{ $est_conf } );
52 dpavlin 117
53 dpavlin 143 my $q = $c->req->params->{$what} ||
54     $c->req->params->{all} || $c->res->output("no results");
55 dpavlin 109
56 dpavlin 143
57 dpavlin 109 $log->info("search for '$q' in $what\n");
58    
59 dpavlin 143 my $max = $est_conf->{'hits_for_suggest'};
60     if (! $max) {
61     $log->info("hits_for_suggest isn't defined, defaulting to 10");
62     $c->config->{'hits_for_suggest'} = 10;
63     $max = 10;
64     }
65 dpavlin 109
66 dpavlin 143 my @hits = $est->search( phrase => $q, max => $max, get_attr => [ $what ] );
67 dpavlin 109
68 dpavlin 143 my $used;
69     my @suggestions;
70    
71     foreach my $res (@hits) {
72     my $v = $res->{ $what } || next;
73     next if ($used->{ $v }++);
74     push @suggestions, $v;
75     }
76    
77     $log->debug( ($#suggestions + 1) . " unique hits returned");
78    
79     $c->res->body( $c->prototype->auto_complete_result( \@suggestions ) );
80 dpavlin 109 }
81    
82     =back
83    
84    
85     =head1 AUTHOR
86    
87     Dobrica Pavlinusic,,,
88    
89     =head1 LICENSE
90    
91     This library is free software, you can redistribute it and/or modify
92     it under the same terms as Perl itself.
93    
94     =cut
95    
96     1;

  ViewVC Help
Powered by ViewVC 1.1.26