From 15bbb837d57ab26be587cd48500bc5f7441d5c45 Mon Sep 17 00:00:00 2001 From: Andrew Date: Fri, 2 Mar 2018 15:12:57 -0800 Subject: [PATCH] Performance updates [skip ci] --- lib/searchkick/bulk_reindex_job.rb | 2 +- lib/searchkick/index.rb | 13 +++++++++++++ lib/searchkick/record_data.rb | 36 +++++++++++++++--------------------- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/lib/searchkick/bulk_reindex_job.rb b/lib/searchkick/bulk_reindex_job.rb index 1bb89b8..0c48f55 100644 --- a/lib/searchkick/bulk_reindex_job.rb +++ b/lib/searchkick/bulk_reindex_job.rb @@ -4,7 +4,7 @@ module Searchkick def perform(class_name:, record_ids: nil, index_name: nil, method_name: nil, batch_id: nil, min_id: nil, max_id: nil) klass = class_name.constantize - index = index_name ? Searchkick::Index.new(index_name) : klass.searchkick_index + index = index_name ? Searchkick::Index.new(index_name, **klass.searchkick_options) : klass.searchkick_index record_ids ||= min_id..max_id index.import_scope( Searchkick.load_records(klass, record_ids), diff --git a/lib/searchkick/index.rb b/lib/searchkick/index.rb index 10fb544..fa58aba 100644 --- a/lib/searchkick/index.rb +++ b/lib/searchkick/index.rb @@ -228,6 +228,19 @@ module Searchkick end end + # should not be public + def conversions_fields + @conversions_fields ||= Array(options[:conversions]).map(&:to_s) + end + + def suggest_fields + @suggest_fields ||= Array(options[:suggest]).map(&:to_s) + end + + def locations_fields + @locations_fields ||= Array(options[:locations]).map(&:to_s) + end + protected def client diff --git a/lib/searchkick/record_data.rb b/lib/searchkick/record_data.rb index d9212cb..e5205da 100644 --- a/lib/searchkick/record_data.rb +++ b/lib/searchkick/record_data.rb @@ -1,6 +1,7 @@ module Searchkick class RecordData EXCLUDED_ATTRIBUTES = ["_id", "_type"] + TYPE_KEY = "type" attr_reader :index, :record @@ -48,7 +49,6 @@ module Searchkick def search_data(method_name = nil) partial_reindex = !method_name.nil? - options = record.class.searchkick_options # remove _id since search_id is used instead source = record.send(method_name || :search_data) @@ -62,37 +62,31 @@ module Searchkick end # conversions - if options[:conversions] - Array(options[:conversions]).map(&:to_s).each do |conversions_field| - if source[conversions_field] - source[conversions_field] = source[conversions_field].map { |k, v| {query: k, count: v} } - end + index.conversions_fields.each do |conversions_field| + if source[conversions_field] + source[conversions_field] = source[conversions_field].map { |k, v| {query: k, count: v} } end end # hack to prevent generator field doesn't exist error - if options[:suggest] - options[:suggest].map(&:to_s).each do |field| - source[field] = nil if !source[field] && !partial_reindex - end + index.suggest_fields.each do |field| + source[field] = nil if !source[field] && !partial_reindex end # locations - if options[:locations] - options[:locations].map(&:to_s).each do |field| - if source[field] - if !source[field].is_a?(Hash) && (source[field].first.is_a?(Array) || source[field].first.is_a?(Hash)) - # multiple locations - source[field] = source[field].map { |a| location_value(a) } - else - source[field] = location_value(source[field]) - end + index.locations_fields.each do |field| + if source[field] + if !source[field].is_a?(Hash) && (source[field].first.is_a?(Array) || source[field].first.is_a?(Hash)) + # multiple locations + source[field] = source[field].map { |a| location_value(a) } + else + source[field] = location_value(source[field]) end end end - if !source.key?("type") && record.class.searchkick_klass.searchkick_options[:inheritance] - source["type"] = document_type(true) + if !source.key?(TYPE_KEY) && index.options[:inheritance] + source[TYPE_KEY] = document_type(true) end cast_big_decimal(source) -- libgit2 0.21.0