finish riak search support
[webpac2] / lib / WebPAC / Output / Riak.pm
index 5ca5a8c..ef8de6d 100644 (file)
@@ -8,6 +8,7 @@ __PACKAGE__->mk_accessors(qw(
        input
        url
        database
+       bucket
 ));
 
 use Data::Dump qw/dump/;
@@ -16,7 +17,7 @@ use Net::Riak;
 
 =head1 NAME
 
-WebPAC::Output::Riak - feed data into Riak
+WebPAC::Output::Riak - feed data into Riak Search
 
 =head1 FUNCTIONS
 
@@ -32,10 +33,16 @@ sub init {
 
        $log->debug('init');
 
+       my $bucket = $self->bucket || join('.', $self->database, $self->input || 'webpac2' );
+
        $self->{_riak} = Net::Riak->new( host => $self->url );
-       $self->{_bucket} = $self->{_riak}->bucket( $self->database );
+       $self->{_bucket} = $self->{_riak}->bucket( $bucket );
+       $self->{_bucket}->set_properties({
+               precommit => [ { mod => 'riak_search_kv_hook', fun => 'precommit' } ],
+       });
 
-       $log->info("Riak ",$self->url, " bucket ", $self->database);
+       $log->info( $self->url,"/riak/$bucket" );
+#      warn dump($self->{_bucket}->get_properties);
 
        $self->{_count} = 0;
 
@@ -51,17 +58,23 @@ Adds one entry to database.
 
 =cut
 
-sub add_row {
-       my $self = shift;
+sub add {
+       my ($self,$id,$ds) = @_;
+       my $log = $self->_get_logger;
 
-       my ( $id, $ds ) = @_;
+#      $log->debug( 'ds = ', $id, sub { dump($ds) } );
 
-       my $log = $self->_get_logger;
+       my $data;
+       $data->{$_} = join(' ', @{ $ds->{$_}->{search} }) foreach
+               map { m/^\d+$/ ? $_ = $_ . '_num' : $_ }
+               # add _num suffix for riak search https://wiki.basho.com/display/RIAK/Riak+Search+-+Schema
+               grep { exists $ds->{$_}->{search} }
+               keys %$ds;
 
-       my $obj = $self->{_bucket}->new_object( $id, $ds );
+       my $obj = $self->{_bucket}->new_object( $id, $data );
        $obj->store;
 
-       $log->debug( $id, sub { dump($ds) } );
+       $log->debug( 'json = ', $id, sub { dump($data) } );
 
        $self->{_count}++;