---
name: "Lucy::Index::Segment"
section: "3pm"
platform: "linux"
package: "liblucy-perl"
version: "0.3.3-7+b1"
release: "Debian 9 (Stretch)"
platforms: ["linux"]
url: "https://new.carta.tech/Lucy::Index::Segment"
---

# Lucy::Index::Segment(3pm)

Warehouse for information about one segment of an inverted index.

## 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(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( *\[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\_metadata(key)

Fetch a value from the Segment's metadata hash.

### 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(field\_num)

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

### *get\_name()*

Getter for the object's seg name.

### *get\_number()*

Getter for the segment number.

### set\_count(count)

Setter for the object's document count.

### *get\_count()*

Getter for the object's document count.

## INHERITANCE

Lucy::Index::Segment isa Lucy::Object::Obj.
