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