Commit b7e366a9dcd4ea72c3b53e46666465a4cd64c351

Authored by Rustam Sharshenov
1 parent 9c8170e2

Include indexed search_data on demand

lib/searchkick/model.rb
... ... @@ -7,6 +7,8 @@ module Searchkick
7 7 class_eval do
8 8 cattr_reader :searchkick_options, :searchkick_env, :searchkick_klass
9 9  
  10 + attr_accessor :response_search_data
  11 +
10 12 callbacks = options.has_key?(:callbacks) ? options[:callbacks] : true
11 13  
12 14 class_variable_set :@@searchkick_options, options.dup
... ...
lib/searchkick/query.rb
... ... @@ -328,7 +328,7 @@ module Searchkick
328 328  
329 329 # An empty array will cause only the _id and _type for each hit to be returned
330 330 # http://www.elasticsearch.org/guide/reference/api/search/fields/
331   - if load
  331 + if load and not options[:include_search_data]
332 332 payload[:fields] = []
333 333 elsif options[:select]
334 334 payload[:fields] = options[:select]
... ... @@ -408,6 +408,7 @@ module Searchkick
408 408 per_page: @per_page,
409 409 padding: @padding,
410 410 load: @load,
  411 + include_search_data: options[:include_search_data] || false,
411 412 includes: options[:include] || options[:includes],
412 413 json: !options[:json].nil?
413 414 }
... ...
lib/searchkick/results.rb
... ... @@ -41,19 +41,12 @@ module Searchkick
41 41  
42 42 # sort
43 43 hits.map do |hit|
44   - results[hit["_type"]].find{|r| r.id.to_s == hit["_id"].to_s }
  44 + result = results[hit["_type"]].find{|r| r.id.to_s == hit["_id"].to_s }
  45 + result.response_search_data = build_hashie_result hit if options[:include_search_data] and result
  46 + result
45 47 end.compact
46 48 else
47   - hits.map do |hit|
48   - result =
49   - if hit["_source"]
50   - hit.except("_source").merge(hit["_source"])
51   - else
52   - hit.except("fields").merge(hit["fields"])
53   - end
54   - result["id"] ||= result["_id"] # needed for legacy reasons
55   - Hashie::Mash.new(result)
56   - end
  49 + hits.map { |hit| build_hashie_result hit }
57 50 end
58 51 end
59 52 end
... ... @@ -143,5 +136,16 @@ module Searchkick
143 136 @response["hits"]["hits"]
144 137 end
145 138  
  139 + def build_hashie_result hit
  140 + result =
  141 + if hit["_source"]
  142 + hit.except("_source").merge(hit["_source"])
  143 + else
  144 + hit.except("fields").merge(hit["fields"])
  145 + end
  146 + result["id"] ||= result["_id"] # needed for legacy reasons
  147 + Hashie::Mash.new(result)
  148 + end
  149 +
146 150 end
147 151 end
... ...