Class: Searchkick::Results
- Inherits:
-
Object
- Object
- Searchkick::Results
- Extended by:
- Forwardable
- Includes:
- Enumerable
- Defined in:
- lib/searchkick/results.rb
Instance Attribute Summary collapse
-
#klass ⇒ Object
readonly
Returns the value of attribute klass.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#response ⇒ Object
readonly
Returns the value of attribute response.
Instance Method Summary collapse
- #current_page ⇒ Object
- #each_with_hit(&block) ⇒ Object
- #entry_name ⇒ Object
- #facets ⇒ Object
- #first_page? ⇒ Boolean
- #hits ⇒ Object
-
#initialize(klass, response, options = {}) ⇒ Results
constructor
A new instance of Results.
- #last_page? ⇒ Boolean
- #model_name ⇒ Object
- #next_page ⇒ Object
- #offset_value ⇒ Object (also: #offset)
- #out_of_range? ⇒ Boolean
- #padding ⇒ Object
- #per_page ⇒ Object (also: #limit_value)
- #previous_page ⇒ Object (also: #prev_page)
-
#records ⇒ Object
experimental: may not make next release.
- #results ⇒ Object
- #suggestions ⇒ Object
- #total_count ⇒ Object (also: #total_entries)
- #total_pages ⇒ Object (also: #num_pages)
- #with_details ⇒ Object
Constructor Details
#initialize(klass, response, options = {}) ⇒ Results
Returns a new instance of Results.
12 13 14 15 16 |
# File 'lib/searchkick/results.rb', line 12 def initialize(klass, response, = {}) @klass = klass @response = response @options = end |
Instance Attribute Details
#klass ⇒ Object (readonly)
Returns the value of attribute klass.
8 9 10 |
# File 'lib/searchkick/results.rb', line 8 def klass @klass end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
8 9 10 |
# File 'lib/searchkick/results.rb', line 8 def @options end |
#response ⇒ Object (readonly)
Returns the value of attribute response.
8 9 10 |
# File 'lib/searchkick/results.rb', line 8 def response @response end |
Instance Method Details
#current_page ⇒ Object
91 92 93 |
# File 'lib/searchkick/results.rb', line 91 def current_page [:page] end |
#each_with_hit(&block) ⇒ Object
60 61 62 |
# File 'lib/searchkick/results.rb', line 60 def each_with_hit(&block) results.zip(hits).each(&block) end |
#entry_name ⇒ Object
82 83 84 |
# File 'lib/searchkick/results.rb', line 82 def entry_name model_name.human.downcase end |
#facets ⇒ Object
74 75 76 |
# File 'lib/searchkick/results.rb', line 74 def facets response["facets"] end |
#first_page? ⇒ Boolean
123 124 125 |
# File 'lib/searchkick/results.rb', line 123 def first_page? previous_page.nil? end |
#hits ⇒ Object
135 136 137 |
# File 'lib/searchkick/results.rb', line 135 def hits @response["hits"]["hits"] end |
#last_page? ⇒ Boolean
127 128 129 |
# File 'lib/searchkick/results.rb', line 127 def last_page? next_page.nil? end |
#model_name ⇒ Object
78 79 80 |
# File 'lib/searchkick/results.rb', line 78 def model_name klass.model_name end |
#next_page ⇒ Object
119 120 121 |
# File 'lib/searchkick/results.rb', line 119 def next_page current_page < total_pages ? (current_page + 1) : nil end |
#offset_value ⇒ Object Also known as: offset
109 110 111 |
# File 'lib/searchkick/results.rb', line 109 def offset_value (current_page - 1) * per_page + padding end |
#out_of_range? ⇒ Boolean
131 132 133 |
# File 'lib/searchkick/results.rb', line 131 def out_of_range? current_page > total_pages end |
#padding ⇒ Object
100 101 102 |
# File 'lib/searchkick/results.rb', line 100 def padding [:padding] end |
#per_page ⇒ Object Also known as: limit_value
95 96 97 |
# File 'lib/searchkick/results.rb', line 95 def per_page [:per_page] end |
#previous_page ⇒ Object Also known as: prev_page
114 115 116 |
# File 'lib/searchkick/results.rb', line 114 def previous_page current_page > 1 ? (current_page - 1) : nil end |
#records ⇒ Object
experimental: may not make next release
19 20 21 |
# File 'lib/searchkick/results.rb', line 19 def records @records ||= results_query(klass, hits) end |
#results ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/searchkick/results.rb', line 23 def results @results ||= begin if [:load] # results can have different types results = {} hits.group_by { |hit, i| hit["_type"] }.each do |type, grouped_hits| results[type] = results_query(type.camelize.constantize, grouped_hits).to_a.index_by { |r| r.id.to_s } end # sort hits.map do |hit| results[hit["_type"]][hit["_id"].to_s] end.compact else hits.map do |hit| result = if hit["_source"] hit.except("_source").merge(hit["_source"]) else hit.except("fields").merge(hit["fields"]) end result["id"] ||= result["_id"] # needed for legacy reasons Hashie::Mash.new(result) end end end end |
#suggestions ⇒ Object
52 53 54 55 56 57 58 |
# File 'lib/searchkick/results.rb', line 52 def suggestions if response["suggest"] response["suggest"].values.flat_map { |v| v.first["options"] }.sort_by { |o| -o["score"] }.map { |o| o["text"] }.uniq else raise "Pass `suggest: true` to the search method for suggestions" end end |
#total_count ⇒ Object Also known as: total_entries
86 87 88 |
# File 'lib/searchkick/results.rb', line 86 def total_count response["hits"]["total"] end |
#total_pages ⇒ Object Also known as: num_pages
104 105 106 |
# File 'lib/searchkick/results.rb', line 104 def total_pages (total_count / per_page.to_f).ceil end |
#with_details ⇒ Object
64 65 66 67 68 69 70 71 72 |
# File 'lib/searchkick/results.rb', line 64 def with_details each_with_hit.map do |model, hit| details = {} if hit["highlight"] details[:highlight] = Hash[hit["highlight"].map { |k, v| [([:json] ? k : k.sub(/\.analyzed\z/, "")).to_sym, v.first] }] end [model, details] end end |