From ad2b3e1dca18466bd8067d223f1f53dc37418075 Mon Sep 17 00:00:00 2001 From: Rolf Schmidt Date: Wed, 9 Feb 2022 10:46:10 +0100 Subject: [PATCH] Fixes #3955 - Elasticsearch-Rebuild does not index from new to old. --- .../concerns/has_search_index_backend.rb | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/app/models/concerns/has_search_index_backend.rb b/app/models/concerns/has_search_index_backend.rb index 8f0365b9e..855bfda4b 100644 --- a/app/models/concerns/has_search_index_backend.rb +++ b/app/models/concerns/has_search_index_backend.rb @@ -216,23 +216,26 @@ reload search index with full data def search_index_reload tolerance = 10 tolerance_count = 0 - batch_size = 100 - query = all.order(created_at: :desc) + query = order(created_at: :desc) total = query.count - query.find_in_batches(batch_size: batch_size).with_index do |group, batch| - group.each do |item| - next if item.ignore_search_indexing?(:destroy) - + record_count = 0 + batch_size = 100 + query.as_batches(size: batch_size) do |record| + if !record.ignore_search_indexing?(:destroy) begin - item.search_index_update_backend + record.search_index_update_backend rescue => e - logger.error "Unable to send #{item.class}.find(#{item.id}).search_index_update_backend backend: #{e.inspect}" + logger.error "Unable to send #{record.class}.find(#{record.id}).search_index_update_backend backend: #{e.inspect}" tolerance_count += 1 sleep 15 - raise "Unable to send #{item.class}.find(#{item.id}).search_index_update_backend backend: #{e.inspect}" if tolerance_count == tolerance + raise "Unable to send #{record.class}.find(#{record.id}).search_index_update_backend backend: #{e.inspect}" if tolerance_count == tolerance end end - puts "\t#{[(batch + 1) * batch_size, total].min}/#{total}" # rubocop:disable Rails/Output + + record_count += 1 + if (record_count % batch_size).zero? || record_count == total + puts "\t#{record_count}/#{total}" # rubocop:disable Rails/Output + end end end end