diff --git a/CHANGELOG.md b/CHANGELOG.md index e690500..f292b8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Raise `ArgumentError` instead of `RuntimeError` for unknown operators - Removed mapping of `id` to `_id` with `order` option - Removed `wordnet` option +- Removed `elasticsearch` dependency - Dropped support for Ruby < 2.6 and Active Record < 5.2 - Dropped support for NoBrainer and Cequel - Dropped support for `faraday_middleware-aws-signers-v4` (use `faraday_middleware-aws-sigv4` instead) diff --git a/Gemfile b/Gemfile index c88196d..8b1c784 100644 --- a/Gemfile +++ b/Gemfile @@ -7,6 +7,7 @@ gem "minitest", ">= 5" gem "activerecord", "~> 7.0.0" gem "activejob", "~> 7.0.0", require: "active_job" gem "actionpack", "~> 7.0.0" +gem "elasticsearch" gem "sqlite3" gem "gemoji-parser" gem "typhoeus" diff --git a/gemfiles/opensearch.gemfile b/gemfiles/opensearch.gemfile index 9b4112b..9df814c 100644 --- a/gemfiles/opensearch.gemfile +++ b/gemfiles/opensearch.gemfile @@ -13,5 +13,5 @@ gem "typhoeus" gem "redis" gem "connection_pool" gem "kaminari" -gem "opensearch-ruby", github: "opensearch-project/opensearch-ruby" +gem "opensearch-ruby" gem "parallel_tests" diff --git a/lib/searchkick.rb b/lib/searchkick.rb index ea25f8c..681aa7c 100644 --- a/lib/searchkick.rb +++ b/lib/searchkick.rb @@ -1,7 +1,6 @@ # dependencies require "active_support" require "active_support/core_ext/hash/deep_merge" -require "elasticsearch" require "hashie" # modules @@ -41,6 +40,7 @@ module Searchkick class InvalidQueryError < Error; end class DangerousOperation < Error; end class ImportError < Error; end + class ClientNotFound < Error; end class << self attr_accessor :search_method_name, :timeout, :models, :client_options, :redis, :index_prefix, :index_suffix, :queue_name, :model_options @@ -58,13 +58,38 @@ module Searchkick @client ||= begin require "typhoeus/adapters/faraday" if defined?(Typhoeus) && Gem::Version.new(Faraday::VERSION) < Gem::Version.new("0.14.0") - Elasticsearch::Client.new({ - url: ENV["ELASTICSEARCH_URL"] || ENV["OPENSEARCH_URL"], - transport_options: {request: {timeout: timeout}, headers: {content_type: "application/json"}}, - retry_on_failure: 2 - }.deep_merge(client_options)) do |f| - f.use Searchkick::Middleware - f.request signer_middleware_key, signer_middleware_aws_params if aws_credentials + client_type = + if ENV["OPENSEARCH_URL"] + :opensearch + elsif ENV["ELASTICSEARCH_URL"] + :elasticsearch + elsif defined?(OpenSearch::Client) + :opensearch + elsif defined?(Elasticsearch::Client) + :elasticsearch + else + raise ClientNotFound, "Install the `opensearch-ruby` or `elasticsearch` gem" + end + + if client_type == :opensearch + OpenSearch::Client.new({ + url: ENV["OPENSEARCH_URL"], + transport_options: {request: {timeout: timeout}, headers: {content_type: "application/json"}}, + retry_on_failure: 2 + }.deep_merge(client_options)) do |f| + f.use Searchkick::Middleware + f.request signer_middleware_key, signer_middleware_aws_params if aws_credentials + end + else + # TODO check version >= 7 + Elasticsearch::Client.new({ + url: ENV["ELASTICSEARCH_URL"], + transport_options: {request: {timeout: timeout}, headers: {content_type: "application/json"}}, + retry_on_failure: 2 + }.deep_merge(client_options)) do |f| + f.use Searchkick::Middleware + f.request signer_middleware_key, signer_middleware_aws_params if aws_credentials + end end end end diff --git a/lib/searchkick/middleware.rb b/lib/searchkick/middleware.rb index aad18e5..786bb58 100644 --- a/lib/searchkick/middleware.rb +++ b/lib/searchkick/middleware.rb @@ -1,4 +1,4 @@ -require "faraday/middleware" +require "faraday" module Searchkick class Middleware < Faraday::Middleware diff --git a/searchkick.gemspec b/searchkick.gemspec index f957a0e..09ad2d8 100644 --- a/searchkick.gemspec +++ b/searchkick.gemspec @@ -16,6 +16,5 @@ Gem::Specification.new do |spec| spec.required_ruby_version = ">= 2.6" spec.add_dependency "activemodel", ">= 5.2" - spec.add_dependency "elasticsearch", ">= 6", "< 7.14" spec.add_dependency "hashie" end -- libgit2 0.21.0