NAME

KSx::Index::ByteBufDocWriter - 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( KinoSearch::Architecture );
use KSx::Index::ByteBufDocReader;
use KSx::Index::ByteBufDocWriter;

sub register_doc_writer {
    my ( $self, $seg_writer ) = @_; 
    my $doc_writer = KSx::Index::ByteBufDocWriter->new(
        width      => 16,
        field      => 'id',
        snapshot   => $seg_writer->get_snapshot,
        segment    => $seg_writer->get_segment,
        polyreader => $seg_writer->get_polyreader,
    );  
    $seg_writer->register(
        api       => "KinoSearch::Index::DocReader",
        component => $doc_writer,
    );  
    $seg_writer->add_writer($doc_writer);
}

sub register_doc_reader {
    my ( $self, $seg_reader ) = @_; 
    my $doc_reader = KSx::Index::ByteBufDocReader->new(
        width    => 16,
        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       => 'KinoSearch::Index::DocReader',
        component => $doc_reader,
    );  
}

package MySchema;
use base qw( KinoSearch::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 = KinoSearch::Searcher->new( index => '/path/to/index' );
my $hits = $searcher->hits( query => $query );
while ( my $id = $hits->next ) {
    # $id is a plain old 16-byte Perl scalar instead of a Hit object
    my $real_doc = $external_document_source->fetch($id);
    ...
}

DESCRIPTION

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

COPYRIGHT

Copyright 2009 Marvin Humphrey

LICENSE, DISCLAIMER, BUGS, etc.

See KinoSearch version 0.30.