bulk_indexer.rb
1004 Bytes
module ActsAsFerret
class BulkIndexer
def initialize(args = {})
@batch_size = args[:batch_size] || 1000
@logger = args[:logger]
@model = args[:model]
@work_done = 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 {
records.each { |rec| @index.add_document(rec.to_doc, rec.ferret_analyzer) if rec.ferret_enabled?(true) }
}.to_f
@work_done = offset.to_f / @model_count * 100.0 if @model_count > 0
remaining_time = ( batch_time / @batch_size ) * ( @model_count - offset + @batch_size )
@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
end
end