Lucy::Index::Segment - Warehouse for information about one segment of an inverted index.
# 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; }
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.
my $int = $segment->add_field($field);
Register a new field and assign it a field number. If the field was already known, nothing happens.
Returns: the field’s field number, which is a positive integer.
$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.
my $obj = $segment->fetch_metadata($key);
Fetch a value from the Segment’s metadata hash.
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.
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.
my $string = $segment->get_name();
Getter for the object’s seg name.
my $int = $segment->get_number();
Getter for the segment number.
$segment->set_count($count);
Setter for the object’s document count.
my $int = $segment->get_count();
Getter for the object’s document count.
my $int = $segment->compare_to($other);
Compare by segment number.
Lucy::Index::Segment isa Clownfish::Obj.
Copyright © 2010-2015 The Apache Software Foundation, Licensed under the
Apache License, Version 2.0.
Apache Lucy, Lucy, Apache, the Apache feather logo, and the Apache Lucy project logo are trademarks of The
Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their
respective owners.