Commit 15bbb837d57ab26be587cd48500bc5f7441d5c45

Authored by Andrew
1 parent 717ed55c

Performance updates [skip ci]

lib/searchkick/bulk_reindex_job.rb
@@ -4,7 +4,7 @@ module Searchkick @@ -4,7 +4,7 @@ module Searchkick
4 4
5 def perform(class_name:, record_ids: nil, index_name: nil, method_name: nil, batch_id: nil, min_id: nil, max_id: nil) 5 def perform(class_name:, record_ids: nil, index_name: nil, method_name: nil, batch_id: nil, min_id: nil, max_id: nil)
6 klass = class_name.constantize 6 klass = class_name.constantize
7 - index = index_name ? Searchkick::Index.new(index_name) : klass.searchkick_index 7 + index = index_name ? Searchkick::Index.new(index_name, **klass.searchkick_options) : klass.searchkick_index
8 record_ids ||= min_id..max_id 8 record_ids ||= min_id..max_id
9 index.import_scope( 9 index.import_scope(
10 Searchkick.load_records(klass, record_ids), 10 Searchkick.load_records(klass, record_ids),
lib/searchkick/index.rb
@@ -228,6 +228,19 @@ module Searchkick @@ -228,6 +228,19 @@ module Searchkick
228 end 228 end
229 end 229 end
230 230
  231 + # should not be public
  232 + def conversions_fields
  233 + @conversions_fields ||= Array(options[:conversions]).map(&:to_s)
  234 + end
  235 +
  236 + def suggest_fields
  237 + @suggest_fields ||= Array(options[:suggest]).map(&:to_s)
  238 + end
  239 +
  240 + def locations_fields
  241 + @locations_fields ||= Array(options[:locations]).map(&:to_s)
  242 + end
  243 +
231 protected 244 protected
232 245
233 def client 246 def client
lib/searchkick/record_data.rb
1 module Searchkick 1 module Searchkick
2 class RecordData 2 class RecordData
3 EXCLUDED_ATTRIBUTES = ["_id", "_type"] 3 EXCLUDED_ATTRIBUTES = ["_id", "_type"]
  4 + TYPE_KEY = "type"
4 5
5 attr_reader :index, :record 6 attr_reader :index, :record
6 7
@@ -48,7 +49,6 @@ module Searchkick @@ -48,7 +49,6 @@ module Searchkick
48 49
49 def search_data(method_name = nil) 50 def search_data(method_name = nil)
50 partial_reindex = !method_name.nil? 51 partial_reindex = !method_name.nil?
51 - options = record.class.searchkick_options  
52 52
53 # remove _id since search_id is used instead 53 # remove _id since search_id is used instead
54 source = record.send(method_name || :search_data) 54 source = record.send(method_name || :search_data)
@@ -62,37 +62,31 @@ module Searchkick @@ -62,37 +62,31 @@ module Searchkick
62 end 62 end
63 63
64 # conversions 64 # conversions
65 - if options[:conversions]  
66 - Array(options[:conversions]).map(&:to_s).each do |conversions_field|  
67 - if source[conversions_field]  
68 - source[conversions_field] = source[conversions_field].map { |k, v| {query: k, count: v} }  
69 - end 65 + index.conversions_fields.each do |conversions_field|
  66 + if source[conversions_field]
  67 + source[conversions_field] = source[conversions_field].map { |k, v| {query: k, count: v} }
70 end 68 end
71 end 69 end
72 70
73 # hack to prevent generator field doesn't exist error 71 # hack to prevent generator field doesn't exist error
74 - if options[:suggest]  
75 - options[:suggest].map(&:to_s).each do |field|  
76 - source[field] = nil if !source[field] && !partial_reindex  
77 - end 72 + index.suggest_fields.each do |field|
  73 + source[field] = nil if !source[field] && !partial_reindex
78 end 74 end
79 75
80 # locations 76 # locations
81 - if options[:locations]  
82 - options[:locations].map(&:to_s).each do |field|  
83 - if source[field]  
84 - if !source[field].is_a?(Hash) && (source[field].first.is_a?(Array) || source[field].first.is_a?(Hash))  
85 - # multiple locations  
86 - source[field] = source[field].map { |a| location_value(a) }  
87 - else  
88 - source[field] = location_value(source[field])  
89 - end 77 + index.locations_fields.each do |field|
  78 + if source[field]
  79 + if !source[field].is_a?(Hash) && (source[field].first.is_a?(Array) || source[field].first.is_a?(Hash))
  80 + # multiple locations
  81 + source[field] = source[field].map { |a| location_value(a) }
  82 + else
  83 + source[field] = location_value(source[field])
90 end 84 end
91 end 85 end
92 end 86 end
93 87
94 - if !source.key?("type") && record.class.searchkick_klass.searchkick_options[:inheritance]  
95 - source["type"] = document_type(true) 88 + if !source.key?(TYPE_KEY) && index.options[:inheritance]
  89 + source[TYPE_KEY] = document_type(true)
96 end 90 end
97 91
98 cast_big_decimal(source) 92 cast_big_decimal(source)