SWISH::Prog::InvIndex - base class for Swish-e inverted indexes


SWISH-Prog documentation Contained in the SWISH-Prog distribution.

Index


Code Index:

NAME

Top

SWISH::Prog::InvIndex - base class for Swish-e inverted indexes

SYNOPSIS

Top

 use SWISH::Prog::InvIndex;
 my $index = SWISH::Prog::InvIndex->new(path => 'path/to/index');
 print $index;  # prints $index->path
 my $meta = $index->meta;  # $meta isa SWISH::Prog::InvIndex::Meta object

DESCRIPTION

Top

A SWISH::Prog::InvIndex is a base class for defining different Swish-e inverted index formats.

METHODS

Top

init

Implements the base SWISH::Prog::Class method.

path

Returns a Path::Class::Dir object representing the directory path to the index. The path is a directory which contains the various files that comprise the index.

meta

Returns a SWISH::Prog::InvIndex::Meta object with which you can query information about the index.

open

Open the invindex for reading/writing. Subclasses should implement this per their IR library specifics.

This base open() method will rmtree( path() ) if clobber() is true, and will mkpath() if path() does not exist. So SUPER::open() should do something sane at minimum.

open_ro

Open the invindex in read-only mode. This is typical when searching the invindex.

The default open_ro() method will simply call through to open().

close

Close the index. Subclasses should implement this per their IR library specifics.

clobber

Get/set the boolean indicating whether the index should overwrite any existing index with the same name. The default is true.

new_from_meta

Returns a new instance like new() does, blessed into the appropriate class indicated by the swish.xml meta header file.

AUTHOR

Top

Peter Karman, <perl@peknet.com>

BUGS

Top

Please report any bugs or feature requests to bug-swish-prog at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=SWISH-Prog. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

Top

You can find documentation for this module with the perldoc command.

    perldoc SWISH::Prog




You can also look for information at:

* Mailing list

http://lists.swish-e.org/listinfo/users

* RT: CPAN's request tracker

http://rt.cpan.org/NoAuth/Bugs.html?Dist=SWISH-Prog

* AnnoCPAN: Annotated CPAN documentation

http://annocpan.org/dist/SWISH-Prog

* CPAN Ratings

http://cpanratings.perl.org/d/SWISH-Prog

* Search CPAN

http://search.cpan.org/dist/SWISH-Prog/

COPYRIGHT AND LICENSE

Top

SEE ALSO

Top

http://swish-e.org/


SWISH-Prog documentation Contained in the SWISH-Prog distribution.

package SWISH::Prog::InvIndex;

use strict;
use warnings;
use base qw( SWISH::Prog::Class );
use Carp;
use Path::Class ();   # do not import file() and dir()
use Scalar::Util qw( blessed );
use SWISH::Prog::InvIndex::Meta;
use overload(
    '""'     => sub { shift->path },
    'bool'   => sub {1},
    fallback => 1,
);

our $VERSION = '0.51';

__PACKAGE__->mk_accessors(qw( path clobber ));

sub init {
    my $self = shift;
    $self->SUPER::init(@_);
    my $path = $self->{path} || $self->{invindex} || 'index.swish';

    unless ( blessed($path) && $path->isa('Path::Class::Dir') ) {
        $self->path( Path::Class::dir($path) );
    }

    $self->{clobber} = 0 unless exists $self->{clobber};
}

sub new_from_meta {
    my $self = shift;

    # open swish.xml meta file
    my $meta = $self->meta;

    # parse for index format
    my $format = $meta->Index->{Format};

    # create new object and re-set $self
    my $newclass = "SWISH::Prog::${format}::InvIndex";

    warn "reblessing $self into $newclass";

    eval "require $newclass";
    croak $@ if $@;

    return $newclass->new(
        path    => $self->{path},
        clobber => $self->{clobber},
    );
}

sub open {
    my $self = shift;

    if ( -d $self->path && $self->clobber ) {
        $self->path->rmtree( $self->verbose, 1 );
    }
    elsif ( -f $self->path ) {
        croak $self->path
            . " is not a directory -- won't even attempt to clobber";
    }

    if ( !-d $self->path ) {
        carp "no path $self->{path} -- mkpath";
        $self->path->mkpath( $self->verbose );
    }

    1;
}

sub open_ro {
    shift->open(@_);
}

sub close { 1; }

sub meta {
    my $self = shift;
    return SWISH::Prog::InvIndex::Meta->new( invindex => $self );
}

1;

__END__