119 lines
4.1 KiB
Ruby
119 lines
4.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
namespace :search do
|
|
BATCH_SIZE = 1000
|
|
|
|
desc "Update all index mappings"
|
|
task(update_all_mappings: :environment) do
|
|
# If multiple indexers share an index and a mapping, we only need to call
|
|
# create_mapping on one of them.
|
|
Indexer.all.group_by(&:index_name).values.map(&:first).map(&:create_mapping)
|
|
end
|
|
|
|
desc "Recreate tag index"
|
|
task(index_tags: :environment) do
|
|
if Rails.env.production? || Rails.env.test?
|
|
puts 'Running this task will temporarily empty some wrangling bins and affect tag search.
|
|
Have you warned the wrangling team this task is being run?
|
|
Enter YES to continue:'
|
|
|
|
confirmation = $stdin.gets.chomp.strip.upcase
|
|
unless confirmation == "YES"
|
|
puts "Task aborted."
|
|
exit
|
|
end
|
|
end
|
|
TagIndexer.index_all
|
|
end
|
|
|
|
desc "Recreate pseud index"
|
|
task(index_pseuds: :environment) do
|
|
PseudIndexer.index_all
|
|
end
|
|
|
|
desc "Recreate work index"
|
|
task(index_works: :environment) do
|
|
WorkIndexer.index_all
|
|
WorkCreatorIndexer.index_from_db
|
|
end
|
|
|
|
desc "Recreate bookmark index"
|
|
task(index_bookmarks: :environment) do
|
|
BookmarkIndexer.index_all
|
|
end
|
|
|
|
desc "Recreate admin users index"
|
|
task(index_admin_users: :environment) do
|
|
UserIndexer.index_all
|
|
end
|
|
|
|
desc "Reindex all works without recreating the index"
|
|
task(reindex_works: :environment) do
|
|
WorkIndexer.index_from_db
|
|
WorkCreatorIndexer.index_from_db
|
|
end
|
|
|
|
desc "Reindex all bookmarkables without recreating the index"
|
|
task(reindex_bookmarkables: :environment) do
|
|
BookmarkedExternalWorkIndexer.index_from_db
|
|
BookmarkedSeriesIndexer.index_from_db
|
|
BookmarkedWorkIndexer.index_from_db
|
|
end
|
|
|
|
desc "Reindex users without recreating the admin users index"
|
|
task(reindex_admin_users: :environment) do
|
|
UserIndexer.index_from_db
|
|
end
|
|
|
|
desc "Reindex all recently-modified items"
|
|
task timed_all: %i[timed_works timed_tags timed_pseud timed_bookmarks] do
|
|
end
|
|
|
|
desc "Reindex recent bookmarks"
|
|
task timed_bookmarks: :environment do
|
|
time = ENV["TIME_PERIOD"] || "NOW() - INTERVAL 1 DAY"
|
|
ExternalWork.where("external_works.updated_at > #{time}").select(:id).find_in_batches(batch_size: BATCH_SIZE) do |group|
|
|
AsyncIndexer.new(BookmarkedExternalWorkIndexer, :world).enqueue_ids(group.map(&:id))
|
|
end
|
|
Series.where("series.updated_at > #{time}").select(:id).find_in_batches(batch_size: BATCH_SIZE) do |group|
|
|
AsyncIndexer.new(BookmarkedSeriesIndexer, :world).enqueue_ids(group.map(&:id))
|
|
end
|
|
Work.where("works.revised_at > #{time}").select(:id).find_in_batches(batch_size: BATCH_SIZE) do |group|
|
|
AsyncIndexer.new(BookmarkedWorkIndexer, :world).enqueue_ids(group.map(&:id))
|
|
end
|
|
Bookmark.where("bookmarks.updated_at > #{time}").select(:id).find_in_batches(batch_size: BATCH_SIZE) do |group|
|
|
AsyncIndexer.new(BookmarkIndexer, :world).enqueue_ids(group.map(&:id))
|
|
end
|
|
end
|
|
|
|
desc "Reindex recent works"
|
|
task timed_works: :environment do
|
|
time = ENV["TIME_PERIOD"] || "NOW() - INTERVAL 1 DAY"
|
|
Work.where("works.revised_at > #{time}").select(:id).find_in_batches(batch_size: BATCH_SIZE) do |group|
|
|
AsyncIndexer.new(WorkIndexer, :world).enqueue_ids(group.map(&:id))
|
|
end
|
|
end
|
|
|
|
desc "Reindex recent tags"
|
|
task timed_tags: :environment do
|
|
time = ENV["TIME_PERIOD"] || "NOW() - INTERVAL 1 DAY"
|
|
Tag.where("tags.updated_at > #{time}").select(:id).find_in_batches(batch_size: BATCH_SIZE) do |group|
|
|
AsyncIndexer.new(TagIndexer, :world).enqueue_ids(group.map(&:id))
|
|
end
|
|
end
|
|
|
|
desc "Reindex pseuds"
|
|
task timed_pseud: :environment do
|
|
time = ENV["TIME_PERIOD"] || "NOW() - INTERVAL 1 DAY"
|
|
Pseud.where("pseuds.updated_at > #{time}").select(:id).find_in_batches(batch_size: BATCH_SIZE) do |group|
|
|
AsyncIndexer.new(PseudIndexer, :world).enqueue_ids(group.map(&:id))
|
|
end
|
|
end
|
|
|
|
desc "Run tasks enqueued to the world queue by IndexQueue."
|
|
task run_world_index_queue: :environment do
|
|
ScheduledReindexJob::MAIN_CLASSES.each do |klass|
|
|
IndexQueue.from_class_and_label(klass, :world).run
|
|
end
|
|
end
|
|
end
|