From dbc58948795a708b388ad17d6c51eee454a8b582 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Sun, 9 Jan 2011 18:04:20 +0000 Subject: [PATCH 1/1] make indexer and searcher lazy this allows web interface for search to skip creation of indexer --- lib/BackupPC/Search/KinoSearch.pm | 43 +++++++++++++++++++------------ 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/lib/BackupPC/Search/KinoSearch.pm b/lib/BackupPC/Search/KinoSearch.pm index 043f8ab..3efcf8c 100644 --- a/lib/BackupPC/Search/KinoSearch.pm +++ b/lib/BackupPC/Search/KinoSearch.pm @@ -15,6 +15,17 @@ sub new { my $class = shift @_; my %Conf = @_; + my $index_path = $Conf{KinoPath} || die "no KinoPath"; + + my $self = bless { index => $index_path }, $class; + warn "# ",dump($self); + return $self; +} + +sub indexer { + my $self = shift; + return $self->{_indexer} if defined $self->{_indexer}; + my $schema = KinoSearch::Plan::Schema->new; @@ -47,33 +58,33 @@ sub new { # $schema->spec_field( name => '_doc', type => $blob_type ); - my $index_path = $Conf{KinoPath} || die "no KinoPath"; - my $indexer = KinoSearch::Index::Indexer->new( schema => $schema, - index => $index_path, + index => $self->{index}, create => 1, ); - warn "# using $index_path"; - $indexer->commit; # make sure that index exists - my $self = bless { - indexer => $indexer, - searcher => KinoSearch::Search::IndexSearcher->new( - index => $index_path, - ), + warn "# created indexer"; - }, $class; - return $self; + return $self->{_indexer} = $indexer; + +}; + +our $searcher; +sub searcher { + my $self = shift; + return $self->{_searcher} if $self->{_searcher}; + $self->{_searcher} = + KinoSearch::Search::IndexSearcher->new( index => $self->{index} ) } sub exists { my ($self,$row) = @_; my $uri = $row->{hname} . ':' . $row->{sname} . '#' . $row->{backupnum} . ' ' . $row->{filepath}; - my $hits = $self->{searcher}->hits( query => "_uri:$uri" ); + my $hits = $self->searcher->hits( query => "_uri:$uri" ); return $hits->total_hits; } @@ -87,13 +98,13 @@ sub add_doc { warn "XXX ",dump($row) if $ENV{DEBUG}; - $self->{indexer}->add_doc( $row ); + $self->indexer->add_doc( $row ); } sub commit { my $self = shift; - $self->{indexer}->commit; + $self->indexer->commit; warn "# commit index"; } @@ -110,7 +121,7 @@ sub search { my $sort_spec = KinoSearch::Search::SortSpec->new( rules => $rules ); # $q =~ s/(.)/$1 /g; - my $hits = $self->{searcher}->hits( + my $hits = $self->searcher->hits( query => $q, sort_spec => $sort_spec, ); -- 2.20.1