LucyX::Index::ByteBufDocWriter(3) Write a Doc as a fixed-width byte array.

SYNOPSIS

Create an Architecture subclass which overrides register_doc_writer() and register_doc_reader():


package MyArchitecture;
use base qw( Lucy::Plan::Architecture );
use LucyX::Index::ByteBufDocReader;
use LucyX::Index::ByteBufDocWriter;
sub register_doc_writer {
my ( $self, $seg_writer ) = @_;
my $doc_writer = LucyX::Index::ByteBufDocWriter->new(
width => 16,
field => 'value',
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::ByteBufDocReader->new(
width => 16,
field => 'value',
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 { MyArchitecture->new }

Proceed as normal in your indexer app, making sure that every supplied document supplies a valid value for the field in question:

    $indexer->add_doc({
        title   => $title,
        content => $content,
        id      => $id,      # <---- Must meet spec.
    });

Then, in your search app:

    my $searcher = Lucy::Search::IndexSearcher->new( 
        index => '/path/to/index',
    );
    my $hits = $searcher->hits( query => $query );
    while ( my $id = $hits->next ) {
        my $real_doc = $external_document_source->fetch( $doc->{value} );
        ...
    }

DESCRIPTION

This is a proof-of-concept class to demonstrate alternate implementations for fetching documents. It is unsupported.