diff options
-rw-r--r-- | lib/tasks/monsterfork.rake | 50 |
1 files changed, 33 insertions, 17 deletions
diff --git a/lib/tasks/monsterfork.rake b/lib/tasks/monsterfork.rake index efc45b2fe..465299562 100644 --- a/lib/tasks/monsterfork.rake +++ b/lib/tasks/monsterfork.rake @@ -1,24 +1,40 @@ -namespace :monsterfork do - desc '(Re-)Index statuses for search.' - task index_statuses: :environment do - include TextHelper +# frozen_string_literal: true + +def index_statuses(statuses_query) + include TextHelper - i = 0 - total = Status.count + i = 0 + total = statuses_query.count - Status.find_in_batches do |statuses| - ActiveRecord::Base.logger.info("Indexing status #{1+i} of #{total}.") - ActiveRecord::Base.logger.silence do - i += statuses.count - statuses.each do |s| - begin - next if s.destroyed? - s.update_column(:normalized_text, normalize_status(s)) - rescue ActiveRecord::RecordNotFound - true - end + statuses_query.find_in_batches do |statuses| + ActiveRecord::Base.logger.info("Indexing status #{1+i} of #{total}.") + ActiveRecord::Base.logger.silence do + i += statuses.count + statuses.each do |s| + begin + next if s.destroyed? + s.update_column(:normalized_text, normalize_status(s)) + rescue ActiveRecord::RecordNotFound + true end end end end end + +namespace :monsterfork do + desc 'Index statuses for search that have not been indexed yet.' + task index_statuses: :environment do + index_statuses(Status.where(normalized_text: '')) + end + + desc 'Reindex all statuses for search.' + task reindex_statuses: :environment do + index_statuses(Status) + end + + desc 'Reindex statuses containing media with descriptions for search.' + task reindex_media_descs: :environment do + index_statuses(Status.left_outer_joins(:media_attachments).where('media_attachments.description IS NOT NULL')) + end +end |