---
name: "Lucy::Index::DataWriter"
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::DataWriter"
---

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

Write data to an index.

## NAME

Lucy::Index::DataWriter - Write data to an index.

## SYNOPSIS

```
    # Abstract base class.
```

## DESCRIPTION

DataWriter is an abstract base class for writing index data, generally in segment-sized chunks. Each component of an index -- e.g. stored fields, lexicon, postings, deletions -- is represented by a DataWriter/DataReader pair.

Components may be specified per index by subclassing Architecture.

## CONSTRUCTORS

### new( *\[labeled params\]* )

```
    my $writer = MyDataWriter->new(
        snapshot   => $snapshot,      # required
        segment    => $segment,       # required
        polyreader => $polyreader,    # required
    );
```

- •

  **snapshot** - The Snapshot that will be committed at the end of the indexing session.

- •

  **segment** - The Segment in progress.

- •

  **polyreader** - A PolyReader representing all existing data in the index.  (If the index is brand new, the PolyReader will have no sub-readers).

## ABSTRACT METHODS

### add\_inverted\_doc( *\[labeled params\]* )

Process a document, previously inverted by `"inverter"`.

- •

  **inverter** - An Inverter wrapping an inverted document.

- •

  **doc\_id** - Internal number assigned to this document within the segment.

### add\_segment( *\[labeled params\]* )

Add content from an existing segment into the one currently being written.

- •

  **reader** - The SegReader containing content to add.

- •

  **doc\_map** - An array of integers mapping old document ids to new.  Deleted documents are mapped to 0, indicating that they should be skipped.

### *finish()*

Complete the segment: close all streams, store metadata, etc.

### *format()*

Every writer must specify a file format revision number, which should increment each time the format changes. Responsibility for revision checking is left to the companion DataReader.

## METHODS

### delete\_segment(reader)

Remove a segment's data.  The default implementation is a no-op, as all files within the segment directory will be automatically deleted. Subclasses which manage their own files outside of the segment system should override this method and use it as a trigger for cleaning up obsolete data.

- •

  **reader** - The SegReader containing content to merge, which must represent a segment which is part of the the current snapshot.

### merge\_segment( *\[labeled params\]* )

Move content from an existing segment into the one currently being written.

The default implementation calls *add\_segment()* then *delete\_segment()*.

- •

  **reader** - The SegReader containing content to merge, which must represent a segment which is part of the the current snapshot.

- •

  **doc\_map** - An array of integers mapping old document ids to new.  Deleted documents are mapped to 0, indicating that they should be skipped.

### *metadata()*

Arbitrary metadata to be serialized and stored by the Segment.  The default implementation supplies a Hash with a single key-value pair for "format".

### *get\_snapshot()*

Accessor for "snapshot" member var.

### *get\_segment()*

Accessor for "segment" member var.

### *get\_polyreader()*

Accessor for "polyreader" member var.

### *get\_schema()*

Accessor for "schema" member var.

### *get\_folder()*

Accessor for "folder" member var.

## INHERITANCE

Lucy::Index::DataWriter isa Lucy::Object::Obj.
