lib/searchkick/index.rb in searchkick-4.6.2 vs lib/searchkick/index.rb in searchkick-4.6.3
- old
+ new
@@ -82,11 +82,12 @@
end
old_indices =
begin
client.indices.get_alias(name: name).keys
- rescue Elasticsearch::Transport::Transport::Errors::NotFound
+ rescue => e
+ raise e unless Searchkick.not_found_error?(e)
{}
end
actions = old_indices.map { |old_name| {remove: {index: old_name, alias: name}} } + [{add: {index: new_name, alias: name}}]
client.indices.update_aliases body: {actions: actions}
end
@@ -107,11 +108,12 @@
if client.indices.respond_to?(:get_alias)
client.indices.get_alias(index: "#{name}*")
else
client.indices.get_aliases
end
- rescue Elasticsearch::Transport::Transport::Errors::NotFound
+ rescue => e
+ raise e unless Searchkick.not_found_error?(e)
{}
end
indices = indices.select { |_k, v| v.empty? || v["aliases"].empty? } if unaliased
indices.select { |k, _v| k =~ /\A#{Regexp.escape(name)}_\d{14,17}\z/ }.keys
end
@@ -176,17 +178,19 @@
# TODO use index class instead of record class
Searchkick.search(like_text, model: record.class, **options)
end
def reload_synonyms
- require "elasticsearch/xpack"
- raise Error, "Requires Elasticsearch 7.3+" if Searchkick.server_below?("7.3.0")
- raise Error, "Requires elasticsearch-xpack 7.8+" unless client.xpack.respond_to?(:indices)
- begin
- client.xpack.indices.reload_search_analyzers(index: name)
- rescue Elasticsearch::Transport::Transport::Errors::MethodNotAllowed
- raise Error, "Requires non-OSS version of Elasticsearch"
+ if Searchkick.opensearch?
+ client.transport.perform_request "POST", "_plugins/_refresh_search_analyzers/#{CGI.escape(name)}"
+ else
+ raise Error, "Requires Elasticsearch 7.3+" if Searchkick.server_below?("7.3.0")
+ begin
+ client.transport.perform_request("GET", "#{CGI.escape(name)}/_reload_search_analyzers")
+ rescue Elasticsearch::Transport::Transport::Errors::MethodNotAllowed
+ raise Error, "Requires non-OSS version of Elasticsearch"
+ end
end
end
# queue
@@ -359,11 +363,11 @@
{index_name: index.name}
else
index.refresh
true
end
- rescue Elasticsearch::Transport::Transport::Errors::BadRequest => e
- if e.message.include?("No handler for type [text]")
+ rescue => e
+ if Searchkick.transport_error?(e) && e.message.include?("No handler for type [text]")
raise UnsupportedVersionError, "This version of Searchkick requires Elasticsearch 6 or greater"
end
raise e
end