Commit 15bbb837d57ab26be587cd48500bc5f7441d5c45
1 parent
717ed55c
Exists in
master
and in
19 other branches
Performance updates [skip ci]
Showing
3 changed files
with
29 additions
and
22 deletions
Show diff stats
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) |