From 54afd828c2defddfc57faca2f6ea9052dad5bfa4 Mon Sep 17 00:00:00 2001 From: multiple creatures Date: Mon, 18 Nov 2019 01:43:18 -0600 Subject: Split indexing Rake tasks to: `monsterfork:index_statuses` (reindex statuses that do not normalized text yet), `monsterfork:reindex_statuses` (reindex all statuses), and `monsterfork:reindex_media_desc` (reindex statuses with media descriptions). These tasks are only needed by admins setting up Monsterfork for the first time or if the normalization scheme has changed drastically. --- lib/tasks/monsterfork.rake | 50 ++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 17 deletions(-) (limited to 'lib') 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 -- cgit