diff --git a/lib/searchkick/record_data.rb b/lib/searchkick/record_data.rb
index <HASH>..<HASH> 100644
--- a/lib/searchkick/record_data.rb
+++ b/lib/searchkick/record_data.rb
@@ -113,7 +113,12 @@ module Searchkick
         obj.to_f
       when Hash
         obj.each do |k, v|
-          obj[k] = cast_big_decimal(v)
+          # performance
+          if v.is_a?(BigDecimal)
+            obj[k] = v.to_f
+          elsif v.is_a?(Enumerable) ||
+            obj[k] = cast_big_decimal(v)
+          end
         end
       when Enumerable
         obj.map do |v|
Don't reassign unless have to [skip ci]