Class: Solrizer::Fedora::Solrizer

Inherits:
Object
  • Object
show all
Defined in:
lib/solrizer/fedora/solrizer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Solrizer

This method initializes the indexer If passed an argument of :index_full_text=>true, it will perform full-text indexing instead of indexing fields only.



24
25
26
27
28
29
30
31
32
# File 'lib/solrizer/fedora/solrizer.rb', line 24

def initialize( opts={} )
  @@index_list = false unless defined?(@@index_list)
  if opts[:index_full_text] == true || opts[:index_full_text] == "true"
    @index_full_text = true 
  else
    @index_full_text = false 
  end
  @indexer = Indexer.new( :index_full_text=>@index_full_text )
end

Instance Attribute Details

#index_full_textObject

Returns the value of attribute index_full_text.



18
19
20
# File 'lib/solrizer/fedora/solrizer.rb', line 18

def index_full_text
  @index_full_text
end

#indexerObject

Returns the value of attribute indexer.



18
19
20
# File 'lib/solrizer/fedora/solrizer.rb', line 18

def indexer
  @indexer
end

Instance Method Details

#solrize(obj, opts = {}) ⇒ Object

Solrize the given Fedora object’s full-text and facets into the search index

Examples:

Suppress errors using :suppress_errors option

solrizer.solrize("my:pid", :suppress_errors=>true)

Parameters:

  • obj (String or ActiveFedora::Base)

    the object to solrize

  • opts (Hash) (defaults to: {})

    optional parameters



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/solrizer/fedora/solrizer.rb', line 40

def solrize( obj, opts={} )
  # retrieve the Fedora object based on the given unique id
    
    begin
    
    start = Time.now
    logger.debug "SOLRIZER Retrieving object #{obj} ..."


    if obj.kind_of? ActiveFedora::Base
      # do nothing
    elsif obj.kind_of? String
      obj = Repository.get_object( obj )
    elsif obj.respond_to? :pid
      obj = Repository.get_object( obj.pid )
    else
      raise "you must pass either a ActiveFedora::Base, Fedora::RepositoryObject, or a String.  You submitted a #{obj.class}"
    end
      
        obj_done = Time.now
        obj_done_elapse = obj_done - start
        logger.debug  " completed. Duration: #{obj_done_elapse}"
        
       logger.debug "\t Indexing object #{obj.pid} ... "
       # add the keywords and facets to the search index
       index_start = Time.now
       indexer.index( obj )
       
       index_done = Time.now
       index_elapsed = index_done - index_start
       
        logger.debug "completed. Duration:  #{index_elapsed} ."
      
    
    rescue Exception => e
      if opts[:suppress_errors] 
        logger.debug "SOLRIZER unable to index #{obj}.  Failed with #{e.inspect}"
      else
        raise e
      end
  end #begin

end

#solrize_objects(opts = {}) ⇒ Object

Retrieve a comprehensive list of all the unique identifiers in Fedora and solrize each object’s full-text and facets into the search index

Examples:

Suppress errors using :suppress_errors option

solrizer.solrize_objects( :suppress_errors=>true )


89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/solrizer/fedora/solrizer.rb', line 89

def solrize_objects(opts={})
  # retrieve a list of all the pids in the fedora repository
  num_docs = 1000000   # modify this number to guarantee that all the objects are retrieved from the repository
  puts "WARNING: You have turned off indexing of Full Text content.  Be sure to re-run indexer with @@index_full_text set to true in main.rb" if index_full_text == false

  if @@index_list == false
    
    objects = ::Fedora::Repository.instance.find_objects(:limit=>num_docs)

    puts "Shelving #{objects.length} Fedora objects"
    objects.each do |object|
      solrize( object, opts )
    end
   
  else
  
     if File.exists?(@@index_list)
        arr_of_pids = FasterCSV.read(@@index_list, :headers=>false)
        
        puts "Indexing from list at #{@@index_list}"
        puts "Shelving #{arr_of_pids.length} Fedora objects"
        
       arr_of_pids.each do |row|
          pid = row[0]
          solrize( pid )
end #FASTERCSV
      else
        puts "#{@@index_list} does not exists!"
      end #if File.exists
   
  end #if Index_LISTS
end