From b791353e242f70746ab198a384ab29110a71192c Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Sat, 18 Jan 2025 22:18:49 -0800 Subject: [PATCH] Only re-index search when records are updated --- lib/post_deployment/manager.rb | 3 ++- lib/post_deployment/search_indexer.rb | 21 ++++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/post_deployment/manager.rb b/lib/post_deployment/manager.rb index 64a24f8..a997a9e 100644 --- a/lib/post_deployment/manager.rb +++ b/lib/post_deployment/manager.rb @@ -85,7 +85,8 @@ module PostDeployment def rebuild_search_indices SearchIndexer.new( test_mode: @test_mode, - verbose: @verbose + verbose: @verbose, + new_records: @new_records ).rebuild_all end diff --git a/lib/post_deployment/search_indexer.rb b/lib/post_deployment/search_indexer.rb index 8fee55d..786bf46 100644 --- a/lib/post_deployment/search_indexer.rb +++ b/lib/post_deployment/search_indexer.rb @@ -6,9 +6,10 @@ module PostDeployment class SearchIndexer include LoggingHelper - def initialize(test_mode:, verbose:) + def initialize(test_mode:, verbose:, new_records: {}) @test_mode = test_mode @verbose = verbose + @new_records = new_records end def rebuild_all @@ -38,12 +39,22 @@ module PostDeployment end def rebuild_index_for(model) + # Determine model type (lowercase, pluralized) + model_type = model.name.downcase.pluralize + + # Check if there are new records for this model type + new_records = @new_records[model_type] || [] + if @test_mode - log_step "Would rebuild search index for #{model.name}" + log_step "Would rebuild search index for #{model.name}" if new_records.any? else - log_verbose "• #{model.name}... " - PgSearch::Multisearch.rebuild(model) - log_verbose "✅ done!\n" + if new_records.any? + log_verbose "• #{model.name}... " + PgSearch::Multisearch.rebuild(model) + log_verbose "✅ done! (#{new_records.size} new records)\n" + else + log_step "Skipping #{model.name} - no new records" if @verbose + end end rescue StandardError => e log_error("Failed to rebuild index for #{model.name}: #{e.message}")