The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

SWISH::API::Common - SWISH Document Indexing Made Easy

SYNOPSIS

use SWISH::API::Common;

my $swish = SWISH::API::Common->new();

    # Index all files in a directory and its subdirectories
$swish->index("/usr/local/share/doc");

    # After indexing once (it's persistent), fire up as many
    # queries as you like:

    # Search documents containing both "swish" and "install"
for my $hit ($swish->search("swish AND install")) {
    print $hit->path(), "\n";
}

DESCRIPTION

SWISH::API::Common offers an easy interface to the Swish index engine. While SWISH::API offers a complete API, SWISH::API::Common focusses on ease of use.

THIS MODULE IS CURRENTLY UNDER DEVELOPMENT. THE API MIGHT CHANGE AT ANY TIME.

Currently, SWISH::API::Common just allows for indexing documents in a single directory and any of its subdirectories. Also, don't run index() and search() in parallel yet.

INSTALLATION

SWISH::API::Common requires SWISH::API and the swish engine to be installed. Please download the latest release from

http://swish-e.org/distribution/swish-e-2.4.3.tar.gz

and untar it, type

./configure
make
make install

and then install SWISH::API which is contained in the distribution:

cd perl
perl Makefile.PL
make 
make install

METHODS

$sw = SWISH::API::Common->new()

Constructor. Takes many options, but the defaults are usually fine.

Available options and their defaults:

    # Where SWISH::API::Common stores index files etc.
swish_adm_dir   "$ENV{HOME}/.swish-common"

    # The path to swish-e, relative is OK
swish_exe       "swish-e"

    # Swish index file
swish_idx_file  "$self->{swish_adm_dir}/default.idx"

    # Swish configuration file
swish_cnf_file  "$self->{swish_adm_dir}/default.cnf"

    # SWISH Stemming
swish_fuzzy_indexing_mode => "Stemming_en"

    # Maximum amount of data (in bytes) extracted
    # from a single file
file_len_max 100_000

    # Preserve every indexed file's atime
atime_preserve
    
$sw->index($dir, ...)

Generate a new index of all text documents under directory $dir. One or more directories can be specified.

$sw->search("foo AND bar");

Searches the index, using the given search expression. Returns a list hits, which can be asked for their path:

    # Search documents containing 
    # both "foo" and "bar"
for my $hit ($swish->search("foo AND bar")) {
    print $hit->path(), "\n";
}
index_remove

Permanently delete the current index.

TODO List

* More than one index directory
* Remove documents from index
* Iterator for search hits

LEGALESE

Copyright 2005 by Mike Schilli, all rights reserved. This program is free software, you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

2005, Mike Schilli <cpan@perlmeister.com>