Class: ActiveFedora::SolrService

Inherits:
Object
  • Object
show all
Includes:
Loggable, Solrizer::FieldNameMapper
Defined in:
lib/active_fedora/solr_service.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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

#connObject (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

Parameters:

  • pid_array (Array)

    the pids that you want included in the query



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

.instanceObject

Raises:



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