LucyX::Index::ByteBufDocWriter - Write a Doc as a fixed-width byte array.
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} ); ... }
This is a proof-of-concept class to demonstrate alternate implementations for fetching documents. It is unsupported.
To install Lucy, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Lucy
CPAN shell
perl -MCPAN -e shell install Lucy
For more information on module installation, please visit the detailed CPAN module installation guide.