---
name: "Lucy::Plan::Architecture"
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::Plan::Architecture"
---

# Lucy::Plan::Architecture(3pm)

Configure major components of an index.

## NAME

Lucy::Plan::Architecture - Configure major components of an index.

## SYNOPSIS

```
    package MyArchitecture;
    use base qw( Lucy::Plan::Architecture );
    use LucyX::Index::ZlibDocWriter;
    use LucyX::Index::ZlibDocReader;
    sub register_doc_writer {
        my ( $self, $seg_writer ) = @_;
        my $doc_writer = LucyX::Index::ZlibDocWriter->new(
            snapshot   => $seg_writer->get_snapshot,
            segment    => $seg_writer->get_segment,
            polyreader => $seg_writer->get_polyreader,
        );
        $seg_writer->register(
            api       => "Lucy::Index::DocReader",
            component => $doc_writer,
        );
        $seg_writer->add_writer($doc_writer);
    }
    sub register_doc_reader {
        my ( $self, $seg_reader ) = @_;
        my $doc_reader = LucyX::Index::ZlibDocReader->new(
            schema   => $seg_reader->get_schema,
            folder   => $seg_reader->get_folder,
            segments => $seg_reader->get_segments,
            seg_tick => $seg_reader->get_seg_tick,
            snapshot => $seg_reader->get_snapshot,
        );
        $seg_reader->register(
            api       => 'Lucy::Index::DocReader',
            component => $doc_reader,
        );
    }

    package MySchema;
    use base qw( Lucy::Plan::Schema );

    sub architecture {
        shift;
        return MyArchitecture->new(@_);
    }
```

## DESCRIPTION

By default, a Lucy index consists of several main parts: lexicon, postings, stored documents, deletions, and highlight data.  The readers and writers for that data are spawned by Architecture.  Each component operates at the segment level; Architecture's factory methods are used to build up SegWriter and SegReader.

## CONSTRUCTORS

### *new()*

```
    my $arch = Lucy::Plan::Architecture->new;
```

Constructor.  Takes no arguments.

## METHODS

### register\_doc\_writer(writer)

Spawn a DataWriter and *register()* it with the supplied SegWriter, adding it to the SegWriter's writer stack.

- •

  **writer** - A SegWriter.

### register\_doc\_reader(reader)

Spawn a DocReader and *register()* it with the supplied SegReader.

- •

  **reader** - A SegReader.

## INHERITANCE

Lucy::Plan::Architecture isa Lucy::Object::Obj.
