NAME

Senna::Index - Interface to Senna's Index

SYNOPSIS

use Senna::Index;
# Export SEN_INDEX_* constants
use Senna::Index qw(:flags);

my $index = Senna::Index->open($path);
# or
my $index = Senna::Index->create($path, $flags, $n_segment, $encoding);

$index->close();
$index->put($key, $value);
$index->del($key, $value);
$index->replace($key, $old_value, $new_value);

my $cursor = $index->search($query);
while (my $result = $cursor->fetch_next()) {
   $result->key();
   $result->score();
}

while ($cursor->next) { # or $cursor->rewind
   my $key = $cursor->key;
   my $score = $cursor->score;
}

$index->remove();

DESCRIPTION

Senna::Index is an interface to the index struct in Senna (http://dev.razil.jp/project/senna).

METHODS

create($path[, $key_size, $flags, $n_segment, $encoding)

Creates a new senna index in a file specified by $path.

$key_size specifies the key size of the index. Currently Senna::Index only supports

SEN_VARCHAR_KEY
SEN_INT_KEY

default is SEN_VARCHAR_KEY. Once you create an index with one, you must keep supplying that type for the key. The default VARCHAR key will actually allow you to specify any type of strigify-able variable as the key, but if generally INT keys are slightlly faster.

$flags is a bit mask, which can be a combination of

SEN_INDEX_NORMALIZE
SEN_INDEX_NGRAM
SEN_INDEX_SPLIT_ALPHA
SEN_INDEX_SPLIT_DIGIT
SEN_INDEX_SPLIT_SYMBOL

$encoding can be one of

SEN_ENC_DEFAULT
SEN_ENC_NONE
SEN_ENC_EUCJP
SEN_ENC_UTF8
SEN_ENC_SJIS

These constants are available from Senna::Index. See CONSTANTS.

Note that senna actually creates several files for a given index. Given an index filename "senna", it will create the following files:

senna.SEN
senna.SEN.i
senna.SEN.i.c
senna.SEN.l

Refer to the senna documentation for details.

open($path)

Opens an existing senna index file.

close

Closes the current senna index files. Returns true on success, false otherwise.

put($key, $value)

Adds a new entry into the senna index file. Returns true on success, false otherwise.

del($key, $value)

Removes an existing entry from the senna index file. Returns true on success, false otherwise. Note that you need to give the previous value of the key for the index to correctly recoginize the changes.

replace($key, $oldval, $newval)

Replaces the index that $key is pointing to from $oldval to $newval. Note that you need to give the previous value of the key for the index to correctly recoginize the changes.

remove()

Removes the index file opened in the current index.

filename(), keys_size(), flags(), initial_n_segments(), encoding()

Retrieves the index's filename, key_size, flags, initial_n_segments, encoding, respectively

key_size()

Returns the interger size of the underlying senna index.

search($query)

Performs a fulltext search on the opened index. Returns a Senna::Cursor

CONSTANTS

Constants can are available by importing them:

use Senna::Index qw(:key_size);
use Senna::Index qw(:flags);
use Senna::Index qw(:encoding);
use Senna::Index qw(:all);

:key_size exports SEN_VARCHAR_KEY and SEN_INT_KEY.

:flags exports SEN_INDEX_NORMALIZE, SEN_INDEX_NGRAM, SEN_INDEX_SPLIT_ALPHA, SEN_INDEX_SPLIT_DIGIT, SEN_INDEX_SPLIT_SYMBOL.

:encoding exports SEN_ENC_DEFAULT, SEN_ENC_NONE, SEN_ENC_EUCJP, SEN_ENC_UTF8, SEN_ENC_SJIS.

AUTHOR

Copyright (C) 2005 by Daisuke Maki <dmaki@cpan.org>

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.6 or, at your option, any later version of Perl 5 you may have available.

Development funded by Brazil Ltd. <http://dev.razil.jp/project/senna/>

SEE ALSO

http://dev.razil.jp/project/senna - Senna Development Homepage