module Searchkick

Constants

VERSION

Attributes

aws_credentials[R]
client[W]
client_options[RW]
env[W]
index_prefix[RW]
index_suffix[RW]
model_options[RW]
models[RW]
queue_name[RW]
redis[RW]
search_method_name[RW]
search_timeout[W]
timeout[RW]
wordnet_path[RW]

Public Class Methods

aws_credentials=(creds) click to toggle source
# File lib/searchkick.rb, line 161
def self.aws_credentials=(creds)
  begin
    require "faraday_middleware/aws_signers_v4"
  rescue LoadError
    require "faraday_middleware/aws_sigv4"
  end
  @aws_credentials = creds
  @client = nil # reset client
end
callbacks(value) { || ... } click to toggle source
# File lib/searchkick.rb, line 145
def self.callbacks(value)
  if block_given?
    previous_value = callbacks_value
    begin
      self.callbacks_value = value
      result = yield
      indexer.perform if callbacks_value == :bulk
      result
    ensure
      self.callbacks_value = previous_value
    end
  else
    self.callbacks_value = value
  end
end
callbacks?(default: true) click to toggle source
# File lib/searchkick.rb, line 137
def self.callbacks?(default: true)
  if callbacks_value.nil?
    default
  else
    callbacks_value != false
  end
end
callbacks_value() click to toggle source

private

# File lib/searchkick.rb, line 222
def self.callbacks_value
  Thread.current[:searchkick_callbacks_enabled]
end
callbacks_value=(value) click to toggle source

private

# File lib/searchkick.rb, line 227
def self.callbacks_value=(value)
  Thread.current[:searchkick_callbacks_enabled] = value
end
client() click to toggle source
# File lib/searchkick.rb, line 70
def self.client
  @client ||= begin
    require "typhoeus/adapters/faraday" if defined?(Typhoeus)

    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
disable_callbacks() click to toggle source
# File lib/searchkick.rb, line 133
def self.disable_callbacks
  self.callbacks_value = false
end
enable_callbacks() click to toggle source

callbacks

# File lib/searchkick.rb, line 129
def self.enable_callbacks
  self.callbacks_value = nil
end
env() click to toggle source
# File lib/searchkick.rb, line 85
def self.env
  @env ||= ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development"
end
indexer() click to toggle source

private

# File lib/searchkick.rb, line 217
def self.indexer
  Thread.current[:searchkick_indexer] ||= Searchkick::Indexer.new
end
load_records(records, ids) click to toggle source

private

# File lib/searchkick.rb, line 196
def self.load_records(records, ids)
  records =
    if records.respond_to?(:primary_key)
      # ActiveRecord
      records.where(records.primary_key => ids) if records.primary_key
    elsif records.respond_to?(:queryable)
      # Mongoid 3+
      records.queryable.for_ids(ids)
    elsif records.respond_to?(:unscoped) && :id.respond_to?(:in)
      # Nobrainer
      records.unscoped.where(:id.in => ids)
    elsif records.respond_to?(:key_column_names)
      records.where(records.key_column_names.first => ids)
    end

  raise Searchkick::Error, "Not sure how to load records" if !records

  records
end
reindex_status(index_name) click to toggle source
# File lib/searchkick.rb, line 171
def self.reindex_status(index_name)
  if redis
    batches_left = Searchkick::Index.new(index_name).batches_left
    {
      completed: batches_left == 0,
      batches_left: batches_left
    }
  else
    raise Searchkick::Error, "Redis not configured"
  end
end
search_timeout() click to toggle source
# File lib/searchkick.rb, line 89
def self.search_timeout
  @search_timeout || timeout
end
server_below?(version) click to toggle source
# File lib/searchkick.rb, line 97
def self.server_below?(version)
  Gem::Version.new(server_version.split("-")[0]) < Gem::Version.new(version.split("-")[0])
end
server_version() click to toggle source
# File lib/searchkick.rb, line 93
def self.server_version
  @server_version ||= client.info["version"]["number"]
end
signer_middleware_aws_params() click to toggle source

private

# File lib/searchkick.rb, line 237
def self.signer_middleware_aws_params
  if signer_middleware_key == :aws_sigv4
    {service: "es", region: "us-east-1"}.merge(aws_credentials)
  else
    {
      credentials: aws_credentials[:credentials] || Aws::Credentials.new(aws_credentials[:access_key_id], aws_credentials[:secret_access_key]),
      service_name: "es",
      region: aws_credentials[:region] || "us-east-1"
    }
  end
end
signer_middleware_key() click to toggle source

private

# File lib/searchkick.rb, line 232
def self.signer_middleware_key
  defined?(FaradayMiddleware::AwsSignersV4) ? :aws_signers_v4 : :aws_sigv4
end
with_redis() { |r| ... } click to toggle source
# File lib/searchkick.rb, line 183
def self.with_redis
  if redis
    if redis.respond_to?(:with)
      redis.with do |r|
        yield r
      end
    else
      yield redis
    end
  end
end

Public Instance Methods

locale() click to toggle source
# File lib/searchkick/bulk_reindex_job.rb, line 24
def locale
  return "en"
end