NAME

Lucy::Index::Segment - Warehouse for information about one segment of an inverted index.

SYNOPSIS

# Index-time.
package MyDataWriter;
use base qw( Lucy::Index::DataWriter );

sub finish {
    my $self     = shift;
    my $segment  = $self->get_segment;
    my $metadata = $self->SUPER::metadata();
    $metadata->{foo} = $self->get_foo;
    $segment->store_metadata(
        key       => 'my_component',
        metadata  => $metadata
    );
}

# Search-time.
package MyDataReader;
use base qw( Lucy::Index::DataReader );

sub new {
    my $self     = shift->SUPER::new(@_);
    my $segment  = $self->get_segment;
    my $metadata = $segment->fetch_metadata('my_component');
    if ($metadata) {
        $self->set_foo( $metadata->{foo} );
        ...
    }
    return $self;
}

DESCRIPTION

Apache Lucy’s indexes are made up of individual “segments”, each of which is is an independent inverted index. On the file system, each segment is a directory within the main index directory whose name starts with “seg_”: “seg_2”, “seg_5a”, etc.

Each Segment object keeps track of information about an index segment: its fields, document count, and so on. The Segment object itself writes one file, segmeta.json; besides storing info needed by Segment itself, the “segmeta” file serves as a central repository for metadata generated by other index components – relieving them of the burden of storing metadata themselves.

METHODS

add_field

my $int = $segment->add_field($field);

Register a new field and assign it a field number. If the field was already known, nothing happens.

  • field - Field name.

Returns: the field’s field number, which is a positive integer.

store_metadata

$segment->store_metadata(
    key      => $key,       # required
    metadata => $metadata,  # required
);

Store arbitrary information in the segment’s metadata hash, to be serialized later. Throws an error if key is used twice.

  • key - String identifying an index component.

  • metadata - JSON-izable data structure.

fetch_metadata

my $obj = $segment->fetch_metadata($key);

Fetch a value from the Segment’s metadata hash.

field_num

my $int = $segment->field_num($field);

Given a field name, return its field number for this segment (which may differ from its number in other segments). Return 0 (an invalid field number) if the field name can’t be found.

  • field - Field name.

field_name

my $string = $segment->field_name($field_num);

Given a field number, return the name of its field, or undef if the field name can’t be found.

get_name

my $string = $segment->get_name();

Getter for the object’s seg name.

get_number

my $int = $segment->get_number();

Getter for the segment number.

set_count

$segment->set_count($count);

Setter for the object’s document count.

get_count

my $int = $segment->get_count();

Getter for the object’s document count.

compare_to

my $int = $segment->compare_to($other);

Compare by segment number.

INHERITANCE

Lucy::Index::Segment isa Clownfish::Obj.