/[webpac2]/trunk/lib/WebPAC/Search/Estraier.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

Diff of /trunk/lib/WebPAC/Search/Estraier.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 81 by dpavlin, Mon Nov 21 14:42:22 2005 UTC revision 152 by dpavlin, Sat Nov 26 01:38:28 2005 UTC
# Line 13  WebPAC::Search::Estraier - search Hyper Line 13  WebPAC::Search::Estraier - search Hyper
13    
14  =head1 VERSION  =head1 VERSION
15    
16  Version 0.01  Version 0.02
17    
18  =cut  =cut
19    
20  our $VERSION = '0.01';  our $VERSION = '0.02';
21    
22  =head1 SYNOPSIS  =head1 SYNOPSIS
23    
# Line 100  sub new { Line 100  sub new {
100  Locate items in index  Locate items in index
101    
102    my @results = $est->search(    my @results = $est->search(
103          query => 'name of book or novel',          phrase => 'name of book or novel',
104          attr => qw/PersonalName TitleProper/,          add_attr => [
105                    "filepath ISTRINC $q",
106                    "size NUMGT 100",
107            ],
108            get_attr => qw/PersonalName TitleProper/,
109            order => 'NUMD',
110            max => 100,
111            options => $HyperEstraier::Condition::SURE,
112    );    );
113    
114    Options are close match to Hyper Estraier API, except C<get_attr> which defines
115    attributes which will be returned in hash for each record.
116    
117  Results are returned as hash array with keys named by attributes  Results are returned as hash array with keys named by attributes
118    
119  =cut  =cut
# Line 115  sub search { Line 125  sub search {
125    
126          my $log = $self->_get_logger;          my $log = $self->_get_logger;
127    
128          $log->logconfess('need db in object') unless ($self->{'db'});          #$log->debug( 'search args: ' . Dumper($args) );
         $log->logconfess('need attr') unless ($args->{'attr'});  
129    
130          $log->logconfess("need attr as array not " . ref($args->{'attr'}) ) unless (ref($args->{'attr'}) eq 'ARRAY');          $self->confess('need db in object') unless ($self->{db});
131            $self->confess('need get_attr') unless ($args->{get_attr});
132    
133          my $cond = HyperEstraier::Condition->new();          $self->confess("need get_attr as array not " . ref($args->{get_attr}) ) unless (ref($args->{get_attr}) eq 'ARRAY');
134  #       $cond->add_attr("filepath ISTRINC $q");  
135            my $q = $args->{phrase};
136    
137          $cond->set_phrase( $args->{'query'} ) if ($args->{'query'});          $log->debug("args: " . Dumper( $args ));
138          $cond->set_max( $args->{'max'} ) if ($args->{'max'});  
139  #       $cond->set_options( $HyperEstraier::Condition::SURE );          my $cond = HyperEstraier::Condition->new();
140  #       $cond->set_order( 'NUMD' );          if ( ref($args->{add_attr}) eq 'ARRAY' ) {
141                    $log->debug("adding search attributes: " . join(", ", @{ $args->{add_attr} }) );
142                    map {
143                            $cond->add_attr( $self->{iconv}->convert( $_ ) );
144                            $log->debug(" + $_");
145                    } @{ $args->{add_attr} };
146            };
147    
148            $cond->set_phrase( $self->{iconv}->convert($q) ) if ($q);
149            $cond->set_max( $args->{max} ) if ($args->{max});
150            $cond->set_options( $args->{options} ) if ($args->{options});
151            $cond->set_order( $args->{order} ) if ($args->{order});
152    
153          my $result = $self->{'db'}->search($cond, 0) ||          my $result = $self->{db}->search($cond, 0) ||
154                  $log->die("can't search for ", sub { Dumper( $args ) });                  $log->die("can't search for ", sub { Dumper( $args ) });
155    
156          my $hits = $result->doc_num;          my $hits = $result->doc_num;
157          $log->debug("found $hits hits");          $log->debug("found $hits hits for '$q'");
158    
159          my @results;          my @results;
160    
161          for my $i ( 0 .. ( $hits - 1 ) ) {          for my $i ( 0 .. ( $hits - 1 ) ) {
162    
163                  $log->debug("get_doc($i)");                  #$log->debug("get_doc($i)");
164                  my $doc = $result->get_doc( $i );                  my $doc = $result->get_doc( $i );
165                  if (! $doc) {                  if (! $doc) {
166                          $log->warn("can't find result $i");                          $log->warn("can't find result $i");
# Line 147  sub search { Line 169  sub search {
169    
170                  my $hash;                  my $hash;
171    
172                  foreach my $attr (@{ $args->{'attr'} }) {                  foreach my $attr (@{ $args->{get_attr} }) {
173                          my $val = $doc->attr( $attr );                          my $val = $doc->attr( $attr );
174                          $log->debug("attr $attr = ", $val || 'undef');                          #$log->debug("attr $attr = ", $val || 'undef');
175                          $hash->{$attr} = $self->{'iconv'}->convert( $val ) if (defined($val));                          $hash->{$attr} = $self->{iconv}->convert( $val ) if (defined($val));
176                  }                  }
177    
178                  if ($hash) {                  if ($hash) {
# Line 159  sub search { Line 181  sub search {
181    
182          }          }
183    
184          $log->debug("results " . Dumper( \@results ));  #       $log->debug("results " . Dumper( \@results ));
185    
186          $log->logconfess("expected to return array") unless (wantarray);          $self->confess("expected to return array") unless (wantarray);
187    
188          return @results;          return @results;
189  }  }
# Line 177  C<die>. Line 199  C<die>.
199  sub confess {  sub confess {
200          my $self = shift;          my $self = shift;
201          if (my $log = $self->{'log'}) {          if (my $log = $self->{'log'}) {
202                  if ($log->can('confess')) {                  if ($log->can('logconfess')) {
203                          $log->confess(@_);                          $log->logconfess(@_);
204                  } elsif ($log->can('fatal')) {                  } elsif ($log->can('fatal')) {
205                          $log->fatal(@_);                          $log->fatal(@_);
206                            die @_;
207                  } elsif ($log->can('error')) {                  } elsif ($log->can('error')) {
208                          $log->error(@_);                          $log->error(@_);
209                  } else {                  } else {

Legend:
Removed from v.81  
changed lines
  Added in v.152

  ViewVC Help
Powered by ViewVC 1.1.26