NAME
LucyX::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;
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;
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.