Class: ActiveFedora::SolrService
- Inherits:
-
Object
- Object
- ActiveFedora::SolrService
- Includes:
- Loggable, Solrizer::FieldNameMapper
- Defined in:
- lib/active_fedora/solr_service.rb
Instance Attribute Summary collapse
-
#conn ⇒ Object
readonly
Returns the value of attribute conn.
Class Method Summary collapse
-
.construct_query_for_pids(pid_array) ⇒ Object
Construct a solr query for a list of pids This is used to get a solr response based on the list of pids in an object’s RELS-EXT relationhsips If the pid_array is empty, defaults to a query of “id:NEVER_USE_THIS_ID”, which will return an empty solr response.
- .escape_uri_for_query(uri) ⇒ Object
- .instance ⇒ Object
- .register(host = nil, args = {}) ⇒ Object
- .reify_solr_results(solr_result, opts = {}) ⇒ Object
Instance Method Summary collapse
-
#initialize(host, args) ⇒ SolrService
constructor
A new instance of SolrService.
Constructor Details
#initialize(host, args) ⇒ SolrService
Returns a new instance of SolrService.
18 19 20 21 22 |
# File 'lib/active_fedora/solr_service.rb', line 18 def initialize(host, args) host = 'http://localhost:8080/solr' unless host opts = {:autocommit=>:on}.merge(args) @conn = Solr::Connection.new(host, opts) end |
Instance Attribute Details
#conn ⇒ Object (readonly)
Returns the value of attribute conn.
12 13 14 |
# File 'lib/active_fedora/solr_service.rb', line 12 def conn @conn end |
Class Method Details
.construct_query_for_pids(pid_array) ⇒ Object
Construct a solr query for a list of pids This is used to get a solr response based on the list of pids in an object’s RELS-EXT relationhsips If the pid_array is empty, defaults to a query of “id:NEVER_USE_THIS_ID”, which will return an empty solr response
54 55 56 57 58 59 60 61 62 |
# File 'lib/active_fedora/solr_service.rb', line 54 def self.construct_query_for_pids(pid_array) query = "" pid_array.each_index do |i| query << "#{SOLR_DOCUMENT_ID}:#{escape_uri_for_query(pid_array[i])}" query << " OR " if i != pid_array.length-1 end query = "id:NEVER_USE_THIS_ID" if query.empty? || query == "id:" return query end |
.escape_uri_for_query(uri) ⇒ Object
64 65 66 |
# File 'lib/active_fedora/solr_service.rb', line 64 def self.escape_uri_for_query(uri) return uri.gsub(/(:)/, '\\:') end |
.instance ⇒ Object
24 25 26 27 |
# File 'lib/active_fedora/solr_service.rb', line 24 def self.instance raise SolrNotInitialized unless Thread.current[:solr_service] Thread.current[:solr_service] end |
.register(host = nil, args = {}) ⇒ Object
14 15 16 17 |
# File 'lib/active_fedora/solr_service.rb', line 14 def self.register(host=nil, args={}) Thread.current[:solr_service]=self.new(host, args) end |
.reify_solr_results(solr_result, opts = {}) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/active_fedora/solr_service.rb', line 29 def self.reify_solr_results(solr_result,opts={}) unless solr_result.is_a?(Solr::Response::Standard) raise ArgumentError.new("Only solr responses (Solr::Response::Standard) are allowed. You provided a #{solr_result.class}") end results = [] solr_result.hits.each do |hit| model_value = hit[solr_name("active_fedora_model", :symbol)].first if model_value.include?("::") classname = eval(model_value) else classname = Kernel.const_get(model_value) end if opts[:load_from_solr] results << classname.load_instance_from_solr(hit[SOLR_DOCUMENT_ID]) else results << Fedora::Repository.instance.find_model(hit[SOLR_DOCUMENT_ID], classname) end end return results end |