solrizer-fedora
An extension to projecthydra/solrizer that provides utilities for loading objects from Fedora Repositories and creating solr documents from them.
Installation
The gem is hosted on rubygems.org. The best way to manage the gems for your project is to use bundler. Create a Gemfile in the root of your application and include the following:
source "http://rubygems.org"
gem 'solrizer-fedora'
Then:
bundle install
Pre-requisite to Use of Solrizer-Fedora
In order to use solrizer-fedora, you must have a Solr and a Fedora instance available. The easiest approach is to set up an instance of hydra-jetty.
Setup local hydra-jetty
In order to use solrizer-fedora, you must first set up an instance of hydra-jetty.
Once you have set this up, cd into the directory and type:
java -jar start.jar
You must tell the app where to find fedora and solr. Put that information into config/fedora.yml and config/solr.yml:
Sample config files:
config/fedora.yml
development:
fedora:
url: http://fedoraAdmin:[email protected]:8983/fedora
solr:
url: http://127.0.0.1:8983/solr/development
test:
fedora:
url: http://fedoraAdmin:[email protected]:8983/fedora
solr:
url: http://127.0.0.1:8983/solr/test
production:
fedora:
url: http://fedoraAdmin:[email protected]:8080/fedora
solr:
url: http://127.0.0.1:8080/solr
config/solr.yml
development:
default:
url: http://localhost:8983/solr
full_text:
url: http://localhost:8983/solr
test: &<span class="caps">TEST</span>
default:
url: http://localhost:8983/solr
full_text:
url: http://localhost:8983/solr
production:
default:
url: http://localhost:8080/solr/production
full_text:
url: http://localhost:8080/solr/production
Usage
Fire up the console:
Start up a console and load solrizer-fedora:
irb
require "rubygems"
require "solrizer-fedora"
Initialize ActiveFedora:
ActiveFedora.init
Create an instance of Solrizer::Fedora::Solrizer:
solrizer = Solrizer::Fedora::Solrizer.new
Or, if you want to index full text rather than just fields (and you have provided a full text solr index in your solr.yml):
full_text_solrizer = Solrizer::Fedora::Solrizer.new(:index_full_text=>true)
Solrizing a single object in your repository:
If you have an existing object in your repository, you can solrize it by passing its pid:
solrizer.solrize "demo:5"
If you have either an instance of ActiveFedora::Base or Fedora::Object, you can solrize it by passing the object itself:
my_object = ActiveFedora::Base.new
solrizer.solrize my_object
To view the resulting document, open a web browser and go to the jetty’s solr admin page (most likely http://localhost/solr/admin) and query your solr instance for the pid (e.g. id:demo\:5).
Solrizing all the objects in your repository:
In order to solrize all the objects in your repository, run:
solrizer.solrize_objects
Advanced Usage
Solrizer-fedora inspects your repository objects and attempts to match your objects to your ruby models based on the hasModel declarations in the RELS-EXT datastream.
Go to the fedora admin interface (http://FEDORA_BASE_URL/fedora/admin) and create a new object with an PID of “changeme:123” and whatever Label you want.
Once you have created that object you will need to add the RELS-EXT datastream to it. Make the datastream ID “RELS-EXT”, MIME-Type of “application/rdf+xml”, and put the XML below in the XML from text field.
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about="info:fedora/changeme:123">
<hasModel xmlns="info:fedora/fedora-system:def/model#" rdf:resource="info:fedora/afmodel:MyObject"></hasModel>
</rdf:Description>
</rdf:RDF>
Solrizer-fedora will check to see if you have a matching ruby model called MyObject. If you do, it will load it and add any specific solr fields specified. So, assuming the following model:
class MyObject < ActiveFedora::Base
:name => "properties", :type=> ActiveFedora::MetadataDatastream do |m|
m.field 'foo', :string
end
end
Now add another datastream to the changeme:123 object and give it a datastream ID of “properties”, a MIME-Type of “text/xml”, and add the following to the XML from text field:
<fields>
<foo>bar</foo>
</fields>
If you still have your fedora-solrizer class from above you can now solrize the object by ID:
solrizer.solrize "changeme:123"
Now your solr doc with the “changeme:123” ID will include the following:
<arr name="foo_t">
<str>bar</str>
</arr>
Rake tasks
solrizer:fedora:solrize
Required Argument:
- PID=ns:123 The pid of the object to index
Optional Arguments:
- FULL_TEXT=true does a full text index
solrizer:fedora:solrize_objects
Optional Arguments:
- FULL_TEXT=true does a full text index
- INDEX_LIST=filename.csv indexes only the pids in the csv file
Modifying and Testing the Solrizer-Fedora gem
In order to run the RSpec tests, it is necessary to have a hydra-jetty instance running. This can be accomplished two ways:
Using the bundled jetty instance:
Configure the bundled hydra-jetty instance.
git submodule init
git submodule update
Once you have updated the jetty submodule, you can easily run the rspec tests with the following rake task:
rake hudson
While the primary intention of this task is to provide test coverage and documentation out on projecthydra’s continuous integration server, it can also be used locally to run tests without having to install and configure an instance of hydra-jetty.
Note: if you have another instance of hydra-jetty running, you should either close it down prior to running the rake hudson task.
Using a different instance of hydra-jetty:
If you prefer, you can run the specs against a different hydra-jetty instance. Follow the instructions included with those projects to start the jetty instance.
Note on Patches/Pull Requests
- Fork the project.
- Make your feature addition or bug fix.
- Add tests for it. This is important so it doesn’t get broken unintentionally in a future version.
- Commit, do not mess with rake file, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
- Send me a pull request. Bonus points for topic branches.
Copyright
Copyright © 2010 Matt Zumwalt and MediaShelf. See LICENSE for details.