Class: SearchFlip::Connection
- Inherits:
-
Object
- Object
- SearchFlip::Connection
- Defined in:
- lib/search_flip/connection.rb
Instance Attribute Summary collapse
-
#base_url ⇒ Object
readonly
Returns the value of attribute base_url.
-
#bulk_limit ⇒ Object
readonly
Returns the value of attribute bulk_limit.
-
#bulk_max_mb ⇒ Object
readonly
Returns the value of attribute bulk_max_mb.
-
#http_client ⇒ Object
readonly
Returns the value of attribute http_client.
Instance Method Summary collapse
-
#alias_exists?(alias_name) ⇒ Boolean
Returns whether or not the associated Elasticsearch alias already exists.
-
#analyze(request, params = {}) ⇒ Hash
Sends an analyze request to Elasticsearch.
-
#close_index(index_name) ⇒ Boolean
Closes the specified index within Elasticsearch.
-
#cluster_health ⇒ Hash
Queries and returns the Elasticsearch cluster health.
-
#create_index(index_name, index_settings = {}, params = {}) ⇒ Boolean
Creates the specified index within Elasticsearch and applies index settings, if specified.
-
#delete_index(index_name) ⇒ Boolean
Deletes the specified index from Elasticsearch.
-
#freeze_index(index_name) ⇒ Boolean
Freezes the specified index within Elasticsearch.
-
#get_aliases(index_name: "*", alias_name: "*") ⇒ Hash
Fetches information about the specified index aliases.
-
#get_cluster_settings ⇒ Hash
Queries the cluster settings from Elasticsearch.
-
#get_index_settings(index_name) ⇒ Hash
Fetches the index settings for the specified index from Elasticsearch.
-
#get_indices(name = "*", params: {}) ⇒ Array
(also: #cat_indices)
Fetches information about the specified indices.
-
#get_mapping(index_name, type_name: nil) ⇒ Hash
Retrieves the mapping for the specified index and type from Elasticsearch.
-
#index_exists?(index_name) ⇒ Boolean
Returns whether or not the specified index already exists.
-
#index_url(index_name) ⇒ String
Returns the Elasticsearch index URL for the specified index name, ie base URL and index name with prefix.
-
#initialize(options = {}) ⇒ Connection
constructor
Creates a new connection.
-
#msearch(criterias) ⇒ Array<SearchFlip::Response>
Uses the Elasticsearch Multi Search API to execute multiple search requests within a single request.
-
#open_index(index_name) ⇒ Boolean
Opens the specified index within Elasticsearch.
-
#refresh(index_names = nil) ⇒ Boolean
Sends a refresh request to Elasticsearch.
-
#type_url(index_name, type_name) ⇒ String
Returns the full Elasticsearch type URL, ie base URL, index name with prefix and type name.
-
#unfreeze_index(index_name) ⇒ Boolean
Unfreezes the specified index within Elasticsearch.
-
#update_aliases(payload) ⇒ Hash
Used to manipulate, ie add and remove index aliases.
-
#update_cluster_settings(cluster_settings) ⇒ Boolean
Updates the cluster settings according to the specified payload.
-
#update_index_settings(index_name, index_settings) ⇒ Boolean
Updates the index settings within Elasticsearch according to the index settings specified.
-
#update_mapping(index_name, mapping, type_name: nil) ⇒ Boolean
Updates the type mapping for the specified index and type within Elasticsearch according to the specified mapping.
-
#version ⇒ String
Queries and returns the Elasticsearch version used.
Constructor Details
#initialize(options = {}) ⇒ Connection
Creates a new connection.
15 16 17 18 19 20 |
# File 'lib/search_flip/connection.rb', line 15 def initialize( = {}) @base_url = [:base_url] || SearchFlip::Config[:base_url] @http_client = [:http_client] || SearchFlip::HTTPClient.new @bulk_limit = [:bulk_limit] || SearchFlip::Config[:bulk_limit] @version_mutex = Mutex.new end |
Instance Attribute Details
#base_url ⇒ Object (readonly)
Returns the value of attribute base_url.
3 4 5 |
# File 'lib/search_flip/connection.rb', line 3 def base_url @base_url end |
#bulk_limit ⇒ Object (readonly)
Returns the value of attribute bulk_limit.
3 4 5 |
# File 'lib/search_flip/connection.rb', line 3 def bulk_limit @bulk_limit end |
#bulk_max_mb ⇒ Object (readonly)
Returns the value of attribute bulk_max_mb.
3 4 5 |
# File 'lib/search_flip/connection.rb', line 3 def bulk_max_mb @bulk_max_mb end |
#http_client ⇒ Object (readonly)
Returns the value of attribute http_client.
3 4 5 |
# File 'lib/search_flip/connection.rb', line 3 def http_client @http_client end |
Instance Method Details
#alias_exists?(alias_name) ⇒ Boolean
Returns whether or not the associated Elasticsearch alias already exists.
179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/search_flip/connection.rb', line 179 def alias_exists?(alias_name) http_client .headers(accept: "application/json", content_type: "application/json") .get("#{base_url}/_alias/#{alias_name}") true rescue SearchFlip::ResponseError => e return false if e.code == 404 raise e end |
#analyze(request, params = {}) ⇒ Hash
Sends an analyze request to Elasticsearch. Raises SearchFlip::ResponseError in case any errors occur.
143 144 145 146 147 148 149 |
# File 'lib/search_flip/connection.rb', line 143 def analyze(request, params = {}) response = http_client .headers(accept: "application/json") .post("#{base_url}/_analyze", json: request, params: params) SearchFlip::JSON.parse(response.to_s) end |
#close_index(index_name) ⇒ Boolean
Closes the specified index within Elasticsearch. Raises SearchFlip::ResponseError in case any errors occur
232 233 234 235 236 |
# File 'lib/search_flip/connection.rb', line 232 def close_index(index_name) http_client.post("#{index_url(index_name)}/_close") true end |
#cluster_health ⇒ Hash
Queries and returns the Elasticsearch cluster health.
75 76 77 78 79 |
# File 'lib/search_flip/connection.rb', line 75 def cluster_health response = http_client.headers(accept: "application/json").get("#{base_url}/_cluster/health") SearchFlip::JSON.parse(response.to_s) end |
#create_index(index_name, index_settings = {}, params = {}) ⇒ Boolean
Creates the specified index within Elasticsearch and applies index settings, if specified. Raises SearchFlip::ResponseError in case any errors occur.
219 220 221 222 223 |
# File 'lib/search_flip/connection.rb', line 219 def create_index(index_name, index_settings = {}, params = {}) http_client.put(index_url(index_name), params: params, json: index_settings) true end |
#delete_index(index_name) ⇒ Boolean
Deletes the specified index from Elasticsearch. Raises SearchFlip::ResponseError in case any errors occur.
365 366 367 368 369 |
# File 'lib/search_flip/connection.rb', line 365 def delete_index(index_name) http_client.delete index_url(index_name) true end |
#freeze_index(index_name) ⇒ Boolean
Freezes the specified index within Elasticsearch. Raises SearchFlip::ResponseError in case any errors occur
258 259 260 261 262 |
# File 'lib/search_flip/connection.rb', line 258 def freeze_index(index_name) http_client.post("#{index_url(index_name)}/_freeze") true end |
#get_aliases(index_name: "*", alias_name: "*") ⇒ Hash
Fetches information about the specified index aliases. Raises SearchFlip::ResponseError in case any errors occur.
163 164 165 166 167 168 169 |
# File 'lib/search_flip/connection.rb', line 163 def get_aliases(index_name: "*", alias_name: "*") response = http_client .headers(accept: "application/json", content_type: "application/json") .get("#{base_url}/#{index_name}/_alias/#{alias_name}") SearchFlip::JSON.parse(response.to_s) end |
#get_cluster_settings ⇒ Hash
Queries the cluster settings from Elasticsearch
30 31 32 33 34 |
# File 'lib/search_flip/connection.rb', line 30 def get_cluster_settings response = http_client.get("#{base_url}/_cluster/settings") SearchFlip::JSON.parse(response.to_s) end |
#get_index_settings(index_name) ⇒ Hash
Fetches the index settings for the specified index from Elasticsearch. Sends a GET request to index_url/_settings. Raises SearchFlip::ResponseError in case any errors occur.
300 301 302 303 304 305 306 |
# File 'lib/search_flip/connection.rb', line 300 def get_index_settings(index_name) response = http_client .headers(accept: "application/json") .get("#{index_url(index_name)}/_settings") SearchFlip::JSON.parse(response.to_s) end |
#get_indices(name = "*", params: {}) ⇒ Array Also known as: cat_indices
Fetches information about the specified indices. Raises SearchFlip::ResponseError in case any errors occur.
199 200 201 202 203 204 205 |
# File 'lib/search_flip/connection.rb', line 199 def get_indices(name = "*", params: {}) response = http_client .headers(accept: "application/json", content_type: "application/json") .get("#{base_url}/_cat/indices/#{name}", params: params) SearchFlip::JSON.parse(response.to_s) end |
#get_mapping(index_name, type_name: nil) ⇒ Hash
Retrieves the mapping for the specified index and type from Elasticsearch. Raises SearchFlip::ResponseError in case any errors occur.
349 350 351 352 353 354 355 356 |
# File 'lib/search_flip/connection.rb', line 349 def get_mapping(index_name, type_name: nil) url = type_name && version.to_i < 8 ? type_url(index_name, type_name) : index_url(index_name) params = type_name && version.to_f >= 6.7 && version.to_i < 8 ? { include_type_name: true } : {} response = http_client.headers(accept: "application/json").get("#{url}/_mapping", params: params) SearchFlip::JSON.parse(response.to_s) end |
#index_exists?(index_name) ⇒ Boolean
Returns whether or not the specified index already exists.
377 378 379 380 381 382 383 384 385 |
# File 'lib/search_flip/connection.rb', line 377 def index_exists?(index_name) http_client.headers(accept: "application/json").head(index_url(index_name)) true rescue SearchFlip::ResponseError => e return false if e.code == 404 raise e end |
#index_url(index_name) ⇒ String
Returns the Elasticsearch index URL for the specified index name, ie base URL and index name with prefix.
406 407 408 |
# File 'lib/search_flip/connection.rb', line 406 def index_url(index_name) "#{base_url}/#{index_name}" end |
#msearch(criterias) ⇒ Array<SearchFlip::Response>
Uses the Elasticsearch Multi Search API to execute multiple search requests within a single request. Raises SearchFlip::ResponseError in case any errors occur.
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/search_flip/connection.rb', line 93 def msearch(criterias) payload = criterias.flat_map do |criteria| [ SearchFlip::JSON.generate(index: criteria.target.index_name_with_prefix, **(version.to_i < 8 ? { type: criteria.target.type_name } : {})), SearchFlip::JSON.generate(criteria.request) ] end payload = payload.join("\n") payload << "\n" raw_response = http_client .headers(accept: "application/json", content_type: "application/x-ndjson") .post("#{base_url}/_msearch", body: payload) SearchFlip::JSON.parse(raw_response.to_s)["responses"].map.with_index do |response, index| SearchFlip::Response.new(criterias[index], response) end end |
#open_index(index_name) ⇒ Boolean
Opens the specified index within Elasticsearch. Raises SearchFlip::ResponseError in case any errors occur
245 246 247 248 249 |
# File 'lib/search_flip/connection.rb', line 245 def open_index(index_name) http_client.post("#{index_url(index_name)}/_open") true end |
#refresh(index_names = nil) ⇒ Boolean
Sends a refresh request to Elasticsearch. Raises SearchFlip::ResponseError in case any errors occur.
314 315 316 317 318 |
# File 'lib/search_flip/connection.rb', line 314 def refresh(index_names = nil) http_client.post("#{index_names ? index_url(Array(index_names).join(",")) : base_url}/_refresh") true end |
#type_url(index_name, type_name) ⇒ String
Returns the full Elasticsearch type URL, ie base URL, index name with prefix and type name.
395 396 397 |
# File 'lib/search_flip/connection.rb', line 395 def type_url(index_name, type_name) "#{index_url(index_name)}/#{type_name}" end |
#unfreeze_index(index_name) ⇒ Boolean
Unfreezes the specified index within Elasticsearch. Raises SearchFlip::ResponseError in case any errors occur
271 272 273 274 275 |
# File 'lib/search_flip/connection.rb', line 271 def unfreeze_index(index_name) http_client.post("#{index_url(index_name)}/_unfreeze") true end |
#update_aliases(payload) ⇒ Hash
Used to manipulate, ie add and remove index aliases. Raises an SearchFlip::ResponseError in case any errors occur.
127 128 129 130 131 132 133 |
# File 'lib/search_flip/connection.rb', line 127 def update_aliases(payload) response = http_client .headers(accept: "application/json", content_type: "application/json") .post("#{base_url}/_aliases", body: SearchFlip::JSON.generate(payload)) SearchFlip::JSON.parse(response.to_s) end |
#update_cluster_settings(cluster_settings) ⇒ Boolean
Updates the cluster settings according to the specified payload
45 46 47 48 49 |
# File 'lib/search_flip/connection.rb', line 45 def update_cluster_settings(cluster_settings) http_client.put("#{base_url}/_cluster/settings", json: cluster_settings) true end |
#update_index_settings(index_name, index_settings) ⇒ Boolean
Updates the index settings within Elasticsearch according to the index settings specified. Raises SearchFlip::ResponseError in case any errors occur.
286 287 288 289 290 |
# File 'lib/search_flip/connection.rb', line 286 def update_index_settings(index_name, index_settings) http_client.put("#{index_url(index_name)}/_settings", json: index_settings) true end |
#update_mapping(index_name, mapping, type_name: nil) ⇒ Boolean
Updates the type mapping for the specified index and type within Elasticsearch according to the specified mapping. Raises SearchFlip::ResponseError in case any errors occur.
331 332 333 334 335 336 337 338 |
# File 'lib/search_flip/connection.rb', line 331 def update_mapping(index_name, mapping, type_name: nil) url = type_name && version.to_i < 8 ? type_url(index_name, type_name) : index_url(index_name) params = type_name && version.to_f >= 6.7 && version.to_i < 8 ? { include_type_name: true } : {} http_client.put("#{url}/_mapping", params: params, json: mapping) true end |
#version ⇒ String
Queries and returns the Elasticsearch version used.
58 59 60 61 62 63 64 65 66 |
# File 'lib/search_flip/connection.rb', line 58 def version @version_mutex.synchronize do @version ||= begin response = http_client.headers(accept: "application/json").get("#{base_url}/") SearchFlip::JSON.parse(response.to_s)["version"]["number"] end end end |