Module: Elasticsearch::Model

Extended by:
ClassMethods
Defined in:
lib/elasticsearch/model.rb,
lib/elasticsearch/model/proxy.rb,
lib/elasticsearch/model/client.rb,
lib/elasticsearch/model/naming.rb,
lib/elasticsearch/model/adapter.rb,
lib/elasticsearch/model/version.rb,
lib/elasticsearch/model/indexing.rb,
lib/elasticsearch/model/response.rb,
lib/elasticsearch/model/callbacks.rb,
lib/elasticsearch/model/importing.rb,
lib/elasticsearch/model/searching.rb,
lib/elasticsearch/model/multimodel.rb,
lib/elasticsearch/model/serializing.rb,
lib/elasticsearch/model/hash_wrapper.rb,
lib/elasticsearch/model/response/base.rb,
lib/elasticsearch/model/response/result.rb,
lib/elasticsearch/model/adapters/default.rb,
lib/elasticsearch/model/adapters/mongoid.rb,
lib/elasticsearch/model/response/records.rb,
lib/elasticsearch/model/response/results.rb,
lib/elasticsearch/model/adapters/multiple.rb,
lib/elasticsearch/model/response/suggestions.rb,
lib/elasticsearch/model/response/aggregations.rb,
lib/elasticsearch/model/adapters/active_record.rb,
lib/elasticsearch/model/response/pagination/kaminari.rb,
lib/elasticsearch/model/response/pagination/will_paginate.rb

Overview

Elasticsearch integration for Ruby models

‘Elasticsearch::Model` contains modules for integrating the Elasticsearch search and analytical engine with ActiveModel-based classes, or models, for the Ruby programming language.

It facilitates importing your data into an index, automatically updating it when a record changes, searching the specific index, setting up the index mapping or the model JSON serialization.

When the ‘Elasticsearch::Model` module is included in your class, it automatically extends it with the functionality; see Model.included. Most methods are available via the `__elasticsearch__` class and instance method proxies.

It is possible to include/extend the model with the corresponding modules directly, if that is desired:

MyModel.__send__ :extend,  Elasticsearch::Model::Client::ClassMethods
MyModel.__send__ :include, Elasticsearch::Model::Client::InstanceMethods
MyModel.__send__ :extend,  Elasticsearch::Model::Searching::ClassMethods
# ...

Defined Under Namespace

Modules: Adapter, Callbacks, ClassMethods, Client, Importing, Indexing, Naming, Proxy, Response, Searching, Serializing Classes: HashWrapper, Multimodel, NotImplemented, Registry

Constant Summary collapse

METHODS =
[:search, :mapping, :mappings, :settings, :index_name, :import]
VERSION =
'8.0.0'.freeze

Class Method Summary collapse

Methods included from ClassMethods

client, client=, search, settings

Class Method Details

.included(base) ⇒ Object

Adds the ‘Elasticsearch::Model` functionality to the including class.

  • Creates the ‘__elasticsearch__` class and instance method. These methods return a proxy object with other common methods defined on them.

  • The module includes other modules with further functionality.

  • Sets up delegation for common methods such as ‘import` and `search`.

Examples:

Include the module in the ‘Article` model definition


class Article < ActiveRecord::Base
  include Elasticsearch::Model
end

Inject the module into the ‘Article` model during run time


Article.__send__ :include, Elasticsearch::Model


107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/elasticsearch/model.rb', line 107

def self.included(base)
  base.class_eval do
    include Elasticsearch::Model::Proxy
    # Delegate common methods to the `__elasticsearch__` ClassMethodsProxy, unless they are defined already
    class << self
      METHODS.each do |method|
        delegate method, to: :__elasticsearch__ unless self.public_instance_methods.include?(method)
      end

      def inherited(subclass)
        super
        Registry.add(subclass) if subclass.is_a?(Class)
      end
    end
  end

  # Add to the model to the registry if it's a class (and not in intermediate module)
  Registry.add(base) if base.is_a?(Class)
end