Class: Tire::Search::Search
- Inherits:
-
Object
- Object
- Tire::Search::Search
- Defined in:
- lib/tire/search.rb
Instance Attribute Summary collapse
-
#explain(value) ⇒ Object
readonly
Returns the value of attribute explain.
-
#facets ⇒ Object
readonly
Returns the value of attribute facets.
-
#filters ⇒ Object
readonly
Returns the value of attribute filters.
-
#indices ⇒ Object
readonly
Returns the value of attribute indices.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#query(&block) ⇒ Object
readonly
Returns the value of attribute query.
-
#script_fields ⇒ Object
readonly
Returns the value of attribute script_fields.
-
#types ⇒ Object
readonly
Returns the value of attribute types.
Instance Method Summary collapse
- #facet(name, options = {}, &block) ⇒ Object
- #fields(*fields) ⇒ Object
- #filter(type, *options) ⇒ Object
- #from(value) ⇒ Object
- #highlight(*args) ⇒ Object
-
#initialize(indices = nil, options = {}, &block) ⇒ Search
constructor
A new instance of Search.
- #json ⇒ Object
- #logged(endpoint = '_search') ⇒ Object
- #min_score(value) ⇒ Object
- #params ⇒ Object
- #partial_field(name, options) ⇒ Object
- #perform ⇒ Object
- #response ⇒ Object
- #results ⇒ Object
- #script_field(name, options = {}) ⇒ Object
- #set_indices_options(indices) ⇒ Object
- #size(value) ⇒ Object
- #sort(&block) ⇒ Object
- #suggest(name, &block) ⇒ Object
- #to_curl ⇒ Object
- #to_hash ⇒ Object
- #to_json(options = {}) ⇒ Object
- #track_scores(value) ⇒ Object
- #url ⇒ Object
- #version(value) ⇒ Object
Constructor Details
#initialize(indices = nil, options = {}, &block) ⇒ Search
Returns a new instance of Search.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/tire/search.rb', line 9 def initialize(indices=nil, ={}, &block) if indices.is_a?(Hash) (indices) @indices = indices.keys else @indices = Array(indices) end @types = Array(.delete(:type)).map { |type| Utils.escape(type) } @options = @path = ['/', @indices.join(','), @types.join(','), '_search'].compact.join('/').squeeze('/') block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given? end |
Instance Attribute Details
#explain(value) ⇒ Object (readonly)
Returns the value of attribute explain.
7 8 9 |
# File 'lib/tire/search.rb', line 7 def explain @explain end |
#facets ⇒ Object (readonly)
Returns the value of attribute facets.
7 8 9 |
# File 'lib/tire/search.rb', line 7 def facets @facets end |
#filters ⇒ Object (readonly)
Returns the value of attribute filters.
7 8 9 |
# File 'lib/tire/search.rb', line 7 def filters @filters end |
#indices ⇒ Object (readonly)
Returns the value of attribute indices.
7 8 9 |
# File 'lib/tire/search.rb', line 7 def indices @indices end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
7 8 9 |
# File 'lib/tire/search.rb', line 7 def @options end |
#query(&block) ⇒ Object (readonly)
Returns the value of attribute query.
7 8 9 |
# File 'lib/tire/search.rb', line 7 def query @query end |
#script_fields ⇒ Object (readonly)
Returns the value of attribute script_fields.
7 8 9 |
# File 'lib/tire/search.rb', line 7 def script_fields @script_fields end |
#types ⇒ Object (readonly)
Returns the value of attribute types.
7 8 9 |
# File 'lib/tire/search.rb', line 7 def types @types end |
Instance Method Details
#facet(name, options = {}, &block) ⇒ Object
66 67 68 69 70 |
# File 'lib/tire/search.rb', line 66 def facet(name, ={}, &block) @facets ||= {} @facets.update Facet.new(name, , &block).to_hash self end |
#fields(*fields) ⇒ Object
111 112 113 114 |
# File 'lib/tire/search.rb', line 111 def fields(*fields) @fields = Array(fields.flatten) self end |
#filter(type, *options) ⇒ Object
72 73 74 75 76 |
# File 'lib/tire/search.rb', line 72 def filter(type, *) @filters ||= [] @filters << Filter.new(type, *).to_hash self end |
#from(value) ⇒ Object
99 100 101 102 103 |
# File 'lib/tire/search.rb', line 99 def from(value) @from = value @options[:from] = value self end |
#highlight(*args) ⇒ Object
90 91 92 93 94 95 96 97 |
# File 'lib/tire/search.rb', line 90 def highlight(*args) unless args.empty? @highlight = Highlight.new(*args) self else @highlight end end |
#json ⇒ Object
42 43 44 |
# File 'lib/tire/search.rb', line 42 def json @json || (perform; @json) end |
#logged(endpoint = '_search') ⇒ Object
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
# File 'lib/tire/search.rb', line 193 def logged(endpoint='_search') if Configuration.logger Configuration.logger.log_request endpoint, indices, to_curl took = @json['took'] rescue nil code = @response.code rescue nil if Configuration.logger.level.to_s == 'debug' body = if @json MultiJson.encode( @json, :pretty => Configuration.pretty) else MultiJson.encode( MultiJson.load(@response.body), :pretty => Configuration.pretty) rescue '' end else body = '' end Configuration.logger.log_response code || 'N/A', took || 'N/A', body || 'N/A' end end |
#min_score(value) ⇒ Object
131 132 133 134 |
# File 'lib/tire/search.rb', line 131 def min_score(value) @min_score = value self end |
#params ⇒ Object
50 51 52 53 |
# File 'lib/tire/search.rb', line 50 def params = @options.except(:wrapper, :payload, :load) .empty? ? '' : '?' + .to_param end |
#partial_field(name, options) ⇒ Object
116 117 118 119 |
# File 'lib/tire/search.rb', line 116 def partial_field(name, ) @partial_fields ||= {} @partial_fields[name] = end |
#perform ⇒ Object
141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/tire/search.rb', line 141 def perform @response = Configuration.client.get(self.url + self.params, self.to_json) if @response.failure? STDERR.puts "[REQUEST FAILED] #{self.to_curl}\n" raise SearchRequestFailed, @response.to_s end @json = MultiJson.decode(@response.body) @results = Results::Collection.new(@json, @options) return self ensure logged end |
#response ⇒ Object
38 39 40 |
# File 'lib/tire/search.rb', line 38 def response @response || (perform; @response) end |
#results ⇒ Object
34 35 36 |
# File 'lib/tire/search.rb', line 34 def results @results || (perform; @results) end |
#script_field(name, options = {}) ⇒ Object
78 79 80 81 82 |
# File 'lib/tire/search.rb', line 78 def script_field(name, ={}) @script_fields ||= {} @script_fields.merge! ScriptField.new(name, ).to_hash self end |
#set_indices_options(indices) ⇒ Object
25 26 27 28 29 30 31 32 |
# File 'lib/tire/search.rb', line 25 def (indices) indices.each do |index, | if [:boost] @indices_boost ||= {} @indices_boost[index] = [:boost] end end end |
#size(value) ⇒ Object
105 106 107 108 109 |
# File 'lib/tire/search.rb', line 105 def size(value) @size = value @options[:size] = value self end |
#sort(&block) ⇒ Object
61 62 63 64 |
# File 'lib/tire/search.rb', line 61 def sort(&block) @sort = Sort.new(&block).to_ary self end |
#suggest(name, &block) ⇒ Object
84 85 86 87 88 |
# File 'lib/tire/search.rb', line 84 def suggest(name, &block) @suggest ||= {} @suggest.update Tire::Suggest::Suggestion.new(name, &block).to_hash self end |
#to_curl ⇒ Object
154 155 156 157 |
# File 'lib/tire/search.rb', line 154 def to_curl to_json_escaped = to_json.gsub("'",'\u0027') %Q|curl -X GET '#{url}#{params.empty? ? '?' : params.to_s + '&'}pretty' -d '#{to_json_escaped}'| end |
#to_hash ⇒ Object
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/tire/search.rb', line 159 def to_hash @options[:payload] || begin request = {} request.update( { :indices_boost => @indices_boost } ) if @indices_boost request.update( { :query => @query.to_hash } ) if @query request.update( { :sort => @sort.to_ary } ) if @sort request.update( { :facets => @facets.to_hash } ) if @facets request.update( { :filter => @filters.first.to_hash } ) if @filters && @filters.size == 1 request.update( { :filter => { :and => @filters.map {|filter| filter.to_hash} } } ) if @filters && @filters.size > 1 request.update( { :highlight => @highlight.to_hash } ) if @highlight request.update( { :suggest => @suggest.to_hash } ) if @suggest request.update( { :size => @size } ) if @size request.update( { :from => @from } ) if @from request.update( { :fields => @fields } ) if @fields request.update( { :partial_fields => @partial_fields } ) if @partial_fields request.update( { :script_fields => @script_fields } ) if @script_fields request.update( { :version => @version } ) if @version request.update( { :explain => @explain } ) if @explain request.update( { :min_score => @min_score } ) if @min_score request.update( { :track_scores => @track_scores } ) if @track_scores request end end |
#to_json(options = {}) ⇒ Object
183 184 185 186 187 188 189 190 191 |
# File 'lib/tire/search.rb', line 183 def to_json(={}) payload = to_hash # TODO: Remove when deprecated interface is removed if payload.is_a?(String) payload else MultiJson.encode(payload, :pretty => Configuration.pretty) end end |
#track_scores(value) ⇒ Object
136 137 138 139 |
# File 'lib/tire/search.rb', line 136 def track_scores(value) @track_scores = value self end |
#url ⇒ Object
46 47 48 |
# File 'lib/tire/search.rb', line 46 def url Configuration.url + @path end |
#version(value) ⇒ Object
126 127 128 129 |
# File 'lib/tire/search.rb', line 126 def version(value) @version = value self end |