Class: Searchkick::BulkIndexer
- Inherits:
-
Object
- Object
- Searchkick::BulkIndexer
- Defined in:
- lib/searchkick/bulk_indexer.rb
Instance Attribute Summary collapse
-
#index ⇒ Object
readonly
Returns the value of attribute index.
Instance Method Summary collapse
- #batches_left ⇒ Object
- #bulk_delete(records) ⇒ Object
- #bulk_index(records) ⇒ Object
- #bulk_update(records, method_name) ⇒ Object
- #import_scope(relation, resume: false, method_name: nil, async: false, batch: false, batch_id: nil, full: false, scope: nil) ⇒ Object
-
#initialize(index) ⇒ BulkIndexer
constructor
A new instance of BulkIndexer.
Constructor Details
#initialize(index) ⇒ BulkIndexer
Returns a new instance of BulkIndexer.
5 6 7 |
# File 'lib/searchkick/bulk_indexer.rb', line 5 def initialize(index) @index = index end |
Instance Attribute Details
#index ⇒ Object (readonly)
Returns the value of attribute index.
3 4 5 |
# File 'lib/searchkick/bulk_indexer.rb', line 3 def index @index end |
Instance Method Details
#batches_left ⇒ Object
54 55 56 |
# File 'lib/searchkick/bulk_indexer.rb', line 54 def batches_left Searchkick.with_redis { |r| r.scard(batches_key) } end |
#bulk_delete(records) ⇒ Object
46 47 48 |
# File 'lib/searchkick/bulk_indexer.rb', line 46 def bulk_delete(records) Searchkick.indexer.queue(records.reject { |r| r.id.blank? }.map { |r| RecordData.new(index, r).delete_data }) end |
#bulk_index(records) ⇒ Object
42 43 44 |
# File 'lib/searchkick/bulk_indexer.rb', line 42 def bulk_index(records) Searchkick.indexer.queue(records.map { |r| RecordData.new(index, r).index_data }) end |
#bulk_update(records, method_name) ⇒ Object
50 51 52 |
# File 'lib/searchkick/bulk_indexer.rb', line 50 def bulk_update(records, method_name) Searchkick.indexer.queue(records.map { |r| RecordData.new(index, r).update_data(method_name) }) end |
#import_scope(relation, resume: false, method_name: nil, async: false, batch: false, batch_id: nil, full: false, scope: nil) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/searchkick/bulk_indexer.rb', line 9 def import_scope(relation, resume: false, method_name: nil, async: false, batch: false, batch_id: nil, full: false, scope: nil) if scope relation = relation.send(scope) elsif relation.respond_to?(:search_import) relation = relation.search_import end if batch import_or_update relation.to_a, method_name, async Searchkick.with_redis { |r| r.srem(batches_key, batch_id) } if batch_id elsif full && async full_reindex_async(relation) elsif relation.respond_to?(:find_in_batches) if resume # use total docs instead of max id since there's not a great way # to get the max _id without scripting since it's a string # TODO use primary key and prefix with table name relation = relation.where("id > ?", index.total_docs) end relation = relation.select("id").except(:includes, :preload) if async relation.find_in_batches batch_size: batch_size do |items| import_or_update items, method_name, async end else each_batch(relation) do |items| import_or_update items, method_name, async end end end |