KinoSearch
view release on metacpan or search on metacpan
lib/KinoSearch/Index/Indexer.pm view on Meta::CPAN
package KinoSearch::Index::Indexer;
use KinoSearch;
1;
__END__
__BINDING__
my $xs_code = <<'END_XS_CODE';
MODULE = KinoSearch PACKAGE = KinoSearch::Index::Indexer
int32_t
CREATE(...)
CODE:
CHY_UNUSED_VAR(items);
RETVAL = kino_Indexer_CREATE;
OUTPUT: RETVAL
int32_t
TRUNCATE(...)
CODE:
CHY_UNUSED_VAR(items);
RETVAL = kino_Indexer_TRUNCATE;
OUTPUT: RETVAL
void
add_doc(self, ...)
kino_Indexer *self;
PPCODE:
{
kino_Doc *doc = NULL;
SV *doc_sv = NULL;
float boost = 1.0;
if (items == 2) {
doc_sv = ST(1);
}
else if (items > 2) {
SV* boost_sv = NULL;
XSBind_allot_params( &(ST(0)), 1, items,
"KinoSearch::Index::Indexer::add_doc_PARAMS", &doc_sv, "doc", 3,
&boost_sv, "boost", 5, NULL);
if (boost_sv) {
boost = (float)SvNV(boost_sv);
}
}
else if (items == 1) {
CFISH_THROW(KINO_ERR, "Missing required argument 'doc'");
}
// Either get a Doc or use the stock doc.
if ( sv_isobject(doc_sv)
&& sv_derived_from(doc_sv, "KinoSearch::Document::Doc")
) {
IV tmp = SvIV( SvRV(doc_sv) );
doc = INT2PTR(kino_Doc*, tmp);
}
else if (XSBind_sv_defined(doc_sv) && SvROK(doc_sv)) {
HV *maybe_fields = (HV*)SvRV(doc_sv);
if (SvTYPE((SV*)maybe_fields) == SVt_PVHV) {
doc = Kino_Indexer_Get_Stock_Doc(self);
Kino_Doc_Set_Fields(doc, maybe_fields);
}
}
if (!doc) {
THROW(KINO_ERR, "Need either a hashref or a %o",
Kino_VTable_Get_Name(KINO_DOC));
}
Kino_Indexer_Add_Doc(self, doc, boost);
}
END_XS_CODE
my $synopsis = <<'END_SYNOPSIS';
my $indexer = KinoSearch::Index::Indexer->new(
schema => $schema,
index => '/path/to/index',
create => 1,
);
while ( my ( $title, $content ) = each %source_docs ) {
$indexer->add_doc({
title => $title,
content => $content,
});
}
$indexer->commit;
END_SYNOPSIS
my $constructor = <<'END_NEW';
( run in 0.513 second using v1.01-cache-2.11-cpan-5511b514fd6 )