NAME
Catmandu::Store::Solr - A searchable store backed by Solr
SYNOPSIS
use Catmandu::Store::Solr;
my $store = Catmandu::Store::Solr->new(url => 'http://localhost:8983/solr' );
my $obj1 = $store->bag->add({ name => 'Patrick' });
printf "obj1 stored as %s\n" , $obj1->{_id};
# Force an id in the store
my $obj2 = $store->bag->add({ _id => 'test123' , name => 'Nicolas' });
# send all changes to solr (committed automatically)
$store->bag->commit;
#transaction: rollback issued after 'die'
$store->transaction(sub{
$bag->delete_all();
die("oops, didn't want to do that!");
});
my $obj3 = $store->bag->get('test123');
$store->bag->delete('test123');
$store->bag->delete_all;
# All bags are iterators
$store->bag->each(sub { ... });
$store->bag->take(10)->each(sub { ... });
# Some stores can be searched
my $hits = $store->bag->search(query => 'name:Patrick');
SUPPORT
Solr schemas need to support an identifier field (_id
by default) and a bag field (_bag
by default) to be able to store Catmandu items.
CONFIGURATION
- url
-
Solr URL (
http://localhost:8983/solr
by default) - id_field
-
Field that
_id
is mapped to in Solr - bag_field
-
Field that
_bag
is mapped to in Solr
METHODS
transaction
When you issue $bag->commit, all changes made in the buffer are sent to solr, along with a commit. So committing in Catmandu merely means flushing changes;-).
When you wrap your subroutine within 'transaction', this behaviour is disabled temporarily. You still need to call 'commit', but this only sents the documents to Solr without commit. When you call 'die' within the subroutine, a rollback is sent to solr.
#record 'test' added $bag->add({ _id => "test" }); #buffer flushed, and 'commit' sent to solr $bag->commit();
$bag->store->transaction(sub{ $bag->add({ _id => "test",title => "test" }); $bag->commit; #call to die: rollback sent to solr die("oops, didn't want to do that!"); });
#record is still { _id => "test" }
SEE ALSO
Catmandu::Store, WebService::Solr
AUTHOR
Nicolas Steenlant, nicolas.steenlant at ugent.be
Patrick Hochstenbach, patrick.hochstenbach at ugent.be
Nicolas Franck, nicolas.franck at ugent.be
LICENSE AND COPYRIGHT
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.