Sha256: 77c32fca8f7c9c770a8370250a816828e785cc629f8288ec82e1fb7b90f46a61

Contents?: true

Size: 750 Bytes

Versions: 1

Compression:

Stored size: 750 Bytes

Contents

class Supernova::BatchIndexer
  def initialize(index, batch_size = 1_000)
    @index = index
    @batch_size = batch_size
    @docs = []
    if block_given?
      yield(self)
      finish
    end
  end

  def index_doc(doc)
    @docs << doc
    if should_index?
      do_index
    end
  end

  def finish
    do_index
  end

  private

  def should_index?
    @docs.count >= @batch_size
  end

  def do_index
    started = Time.now
    @index.index_docs(@docs) if @docs.any?
    Supernova.log(do_index_log_message(started, Time.now, @docs))
    @docs = []
  end

  def do_index_log_message(started, finished, docs)
    diff = finished - started
    "indexed #{docs.count} docs in %.3f seconds (%.1f docs/second)" % [diff, docs.count / diff]
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
supernova-core-0.0.1 lib/supernova/batch_indexer.rb