DBIx-Class-Indexer-WebService-Lucene
view release on metacpan or search on metacpan
lib/DBIx/Class/Indexer/WebService/Lucene.pm view on Meta::CPAN
=head2 as_document( [ $document ] )
If a document is passed to the method, it will replaces the document's
current fields with those outlined by the source's registered fields.
If no document is passed, it will construct a new
WebService::Lucene::Document object, populate it, and return it.
=cut
sub as_document {
my( $self, $object, $document ) = @_;
$document ||= WebService::Lucene::Document->new;
# this is basically a no-op if it's already been done
# but it needs to be done in case the same indexer is
# used for multiple sources
$self->setup_fields( ref $object );
my $fields = $object->index_fields;
# for each field...
for my $name ( keys %$fields ) {
my $info = $fields->{$name};
my $type = $info->{type} || 'text';
my @values = $self->value_for_field( $object, $name );
# make all those fields
for my $value ( @values ) {
my $field = WebService::Lucene::Field->new( {
name => $name,
value => $value,
type => $type,
} );
$document->add( $field );
}
}
return $document;
}
=head2 insert( $object )
Calls C<update_or_create_document>.
=cut
sub insert {
my $self = shift;
my $object = shift;
$self->update_or_create_document( $object );
}
=head2 update( $object )
Calls C<update_or_create_document>.
=cut
sub update {
my $self = shift;
my $object = shift;
$self->update_or_create_document( $object );
}
=head2 delete( $object )
Deletes document from the index.
=cut
sub delete {
my $self = shift;
my $object = shift;
my $index = $self->_obj;
$self->setup_fields( ref $object );
my $id = $self->value_for_field( $object, $self->field_for_role( ref $object, 'identifier' ) );
if ( my $document = eval { $index->get_document( $id ) } ) {
$document->delete;
}
}
=head2 update_or_create_document( $object )
Will either update or add a document to the index, depending
on its existence in the index.
=cut
sub update_or_create_document {
my $self = shift;
my $object = shift;
my $index = $self->_obj;
$self->setup_fields( ref $object );
my $id = $self->value_for_field( $object, $self->field_for_role( ref $object, 'identifier' ) );
if ( my $document = eval { $index->get_document( $id ) } ) {
$document->clear_fields;
$self->as_document( $object, $document );
$document->update;
}
else {
$index->add_document( $self->as_document( $object ) );
}
}
=head1 SEE ALSO
=over 4
=item * DBIx::Class
=item * DBIx::Class::Indexed
=item * WebService::Lucene
=item * The Lucene Web Service (http://www.lucene-ws.net/)
=back
=head1 AUTHOR
=over 4
=item * Adam Paynter E<lt>adapay@cpan.orgE<gt>
=item * Brian Cassidy E<lt>bricas@cpan.orgE<gt>
=back
=head1 COPYRIGHT AND LICENSE
Copyright 2006 by Adam Paynter
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
1;
( run in 0.929 second using v1.01-cache-2.11-cpan-39bf76dae61 )