Sha256: bde09d013fd48c73acf5705361ae031e274442d29b43f59712c6d197571959ed

Contents?: true

Size: 1.53 KB

Versions: 12

Compression:

Stored size: 1.53 KB

Contents

module ActsAsFerret
  class BulkIndexer
    def initialize(args = {})
      @batch_size = args[:batch_size] || 1000
      @logger = args[:logger]
      @model = args[:model]
      @work_done = 0
      @indexed_records = 0
      @total_time = 0.0
      @index = args[:index]
      if args[:reindex]
        @reindex = true
        @model_count  = @model.count.to_f
      else
        @model_count = args[:total]
      end
    end

    def index_records(records, offset)
      batch_time = measure_time {
        docs = []
        records.each { |rec| docs << [rec.to_doc, rec.ferret_analyzer] if rec.ferret_enabled?(true) }
        @index.update_batch(docs)
      }.to_f
      rec_count = records.size
      @indexed_records += rec_count
      @total_time += batch_time
      @work_done = @indexed_records.to_f / @model_count * 100.0 if @model_count > 0
      @logger.debug "took #{batch_time} to index last #{rec_count} records. #{records_waiting} records to go. Avg time per record: #{avg_time_per_record}"
      remaining_time = avg_time_per_record * records_waiting
      @logger.info "#{@reindex ? 're' : 'bulk '}index model #{@model.name} : #{'%.2f' % @work_done}% complete : #{'%.2f' % remaining_time} secs to finish"
    end
    
    def measure_time
      t1 = Time.now
      yield
      Time.now - t1
    end
    
    protected
    
    def avg_time_per_record
      if @indexed_records > 0
        @total_time / @indexed_records
      else
        0
      end
    end
    
    def records_waiting
      @model_count - @indexed_records
    end

  end

end

Version data entries

12 entries across 12 versions & 2 rubygems

Version Path
acts_as_ferret-0.5.4 lib/acts_as_ferret/bulk_indexer.rb
acts_as_ferret-0.5.3 lib/acts_as_ferret/bulk_indexer.rb
watson-acts_as_ferret-0.4.8.2 lib/bulk_indexer.rb
acts_as_ferret-0.5.2 lib/acts_as_ferret/bulk_indexer.rb
acts_as_ferret-0.4.8.2 lib/bulk_indexer.rb
acts_as_ferret-0.4.8.1 lib/bulk_indexer.rb
acts_as_ferret-0.5.1 lib/acts_as_ferret/bulk_indexer.rb
acts_as_ferret-0.5 lib/acts_as_ferret/bulk_indexer.rb
acts_as_ferret-0.4.8.rails3 lib/bulk_indexer.rb
acts_as_ferret-0.4.8 lib/bulk_indexer.rb
acts_as_ferret-0.4.7 lib/bulk_indexer.rb
acts_as_ferret-0.4.6 lib/bulk_indexer.rb