42 lines
1 KiB
Ruby
42 lines
1 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
class Importer::PublicStatusesIndexImporter < Importer::BaseImporter
|
||
|
def import!
|
||
|
indexable_statuses_scope.find_in_batches(batch_size: @batch_size) do |batch|
|
||
|
in_work_unit(batch.map(&:status_id)) do |status_ids|
|
||
|
bulk = ActiveRecord::Base.connection_pool.with_connection do
|
||
|
Chewy::Index::Import::BulkBuilder.new(index, to_index: Status.includes(:media_attachments, :preloadable_poll).where(id: status_ids)).bulk_body
|
||
|
end
|
||
|
|
||
|
indexed = 0
|
||
|
deleted = 0
|
||
|
|
||
|
bulk.map! do |entry|
|
||
|
if entry[:index]
|
||
|
indexed += 1
|
||
|
else
|
||
|
deleted += 1
|
||
|
end
|
||
|
entry
|
||
|
end
|
||
|
|
||
|
Chewy::Index::Import::BulkRequest.new(index).perform(bulk)
|
||
|
|
||
|
[indexed, deleted]
|
||
|
end
|
||
|
end
|
||
|
|
||
|
wait!
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def index
|
||
|
PublicStatusesIndex
|
||
|
end
|
||
|
|
||
|
def indexable_statuses_scope
|
||
|
Status.indexable.select('"statuses"."id", COALESCE("statuses"."reblog_of_id", "statuses"."id") AS status_id')
|
||
|
end
|
||
|
end
|