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.
Copyright © 2010-2015 The Apache Software Foundation, Licensed under the
Apache License, Version 2.0.
Apache Lucy, Lucy, Apache, the Apache feather logo, and the Apache Lucy project logo are trademarks of The
Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their
respective owners.