Author image Marvin Humphrey
and 1 contributors


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


The KinoSearch code base has been assimilated by the Apache Lucy project. The "KinoSearch" namespace has been deprecated, but development continues under our new name at our new home:


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

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

    # Search-time.
    package MyDataReader;
    use base qw( KinoSearch::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;


KinoSearch'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.



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( [labeled params] )

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 a value from the Segment's metadata hash.


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.


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


Getter for the object's seg name.


Getter for the segment number.


Setter for the object's document count.


Getter for the object's document count.


KinoSearch::Index::Segment isa KinoSearch::Object::Obj.


Copyright 2005-2011 Marvin Humphrey

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.